updated key values, corrected 'locale' description
authorschepers
Thu, 06 Jan 2011 11:00:34 +0900
changeset 280 048cd390e63f
parent 279 491e531c58c6
child 281 59819c9a0afa
updated key values, corrected 'locale' description
html/DOM3-Events.html
--- a/html/DOM3-Events.html	Fri Dec 24 10:11:11 2010 +0900
+++ b/html/DOM3-Events.html	Thu Jan 06 11:00:34 2011 +0900
@@ -25,16 +25,16 @@
       </p>
       <h1 id="Overview-title">Document Object Model (DOM) Level 3 Events Specification</h1>
 <!-- @@@ -->
-      <h2 id="Overview-W3C-doctype">W3C Editor's Draft <time datetime="2010-12-23">23 December 2010</time></h2>
+      <h2 id="Overview-W3C-doctype">W3C Editor's Draft <time datetime="2011-01-05">5 January 2011</time></h2>
       <dl>
         <dt>This version:</dt>
-        <dd><a href="http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.153">http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.153</a></dd>
+        <dd><a href="http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.154">http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.154</a></dd>
 
         <dt>Latest stable version:</dt>
         <dd><a href="http://www.w3.org/TR/DOM-Level-3-Events">http://www.w3.org/TR/DOM-Level-3-Events</a></dd>
 
         <dt>Previous version:</dt>
-        <dd><a href="http://dev.w3.org/cvsweb/~checkout~/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.152">http://dev.w3.org/cvsweb/~checkout~/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.152</a></dd>
+        <dd><a href="http://dev.w3.org/cvsweb/~checkout~/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.153">http://dev.w3.org/cvsweb/~checkout~/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.153</a></dd>
 
         <dt>Editor's Draft:</dt>
         <dd><a href="http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html">http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html</a></dd>
@@ -380,13 +380,13 @@
           <p class="note" id="_0"><strong>Note:</strong> The <a href="http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-5CED94D7"><code>DOMImplementation.hasFeature()</code></a> method has been of limited utility to content authors in some instances, because of imprecision in conformance criteria in some specifications, and insufficient granularity of feature strings, leading to implementations misrepresenting the degree of support for a class of features.  This specification seeks to remedy that in the context of <a class="def" href="#glossary-user-agent">user agents</a> conforming to DOM Level 3 Events by providing discrete feature strings and clear guidelines for the circumstances under which a <a class="def" href="#glossary-user-agent">user agent</a> must or must not report in a positive manner when queried for support of the feature which that feature string represents.</p>
           <p>DOM Level 3 Events introduces compositional feature strings, which are base feature strings combined with extended feature strings, a new mechanism for testing support for each specific feature, rather than relying on modules-level feature strings.  A <a class="def" href="#glossary-user-agent">user agent</a> conforming to DOM Level 3 Events must also implement the following feature string convention for describing DOM3 Events feature support:</p>
           <ul>
-            <li id="base-feature-string">The primary base feature string for DOM Level 3 Events shall be “<code>Events</code>”, with the optional version string “<code>3.0</code>”, indicating that the <a class="def" href="#glossary-user-agent">user agent</a> supports the <a href="#conform-arch">DOM Level 3 Events Architecture</a> in the manner described in the appropriate conformance section.
+            <li id="base-feature-string">The primary base feature string for DOM Level 3 Events must be “<code>Events</code>”, with the optional version string “<code>3.0</code>”, indicating that the <a class="def" href="#glossary-user-agent">user agent</a> supports the <a href="#conform-arch">DOM Level 3 Events Architecture</a> in the manner described in the appropriate conformance section.
               <ul>
-                <li><span class="assert must">Since DOM Level 3 Events is built on top of DOM Level 2 Events [<cite><a class="normative" href="#references-DOM2Events">DOM2 Events</a></cite>], an implementation that returns <code>true</code> for <code>"Events"</code> and <code>"3.0"</code> shall also return <code>true</code> for the parameters <code>"Events"</code> and <code>"2.0"</code>.</span></li>
+                <li><span class="assert must">Since DOM Level 3 Events is built on top of DOM Level 2 Events [<cite><a class="normative" href="#references-DOM2Events">DOM2 Events</a></cite>], an implementation that returns <code>true</code> for <code>"Events"</code> and <code>"3.0"</code> must also return <code>true</code> for the parameters <code>"Events"</code> and <code>"2.0"</code>.</span></li>
                 <li><span class="assert mustnot">If the version parameter is omitted, the <a class="def" href="#glossary-user-agent">user agent</a> must not differentiate between the <a href="#conform-arch">DOM Events Architecture</a> as described in DOM Level 3 Events and DOM Level 2 Events, in terms of reporting support for the features indicated by the base feature string.</span></li>
               </ul>
             </li>
-            <li id="extended-feature-string">The extended feature string for each event type defined in DOM Level 3 Events shall be the base feature string “<code>Events</code>”, followed by the period character ("."), followed by the name of that event type, with the optional version string “<code>3.0</code>”, indicating that the <a class="def" href="#glossary-user-agent">user agent</a> supports that specific event type in the manner described in the appropriate <a href="#conform-module">conformance section</a>.  For example, the feature string for the <a class="eventtype" href="#event-type-textinput"><code>textinput</code></a> event would be “<code>Events.textinput</code>”, with the optional version string “<code>3.0</code>”.
+            <li id="extended-feature-string">The extended feature string for each event type defined in DOM Level 3 Events must be the base feature string “<code>Events</code>”, followed by the period character ("."), followed by the name of that event type, with the optional version string “<code>3.0</code>”, indicating that the <a class="def" href="#glossary-user-agent">user agent</a> supports that specific event type in the manner described in the appropriate <a href="#conform-module">conformance section</a>.  For example, the feature string for the <a class="eventtype" href="#event-type-textinput"><code>textinput</code></a> event would be “<code>Events.textinput</code>”, with the optional version string “<code>3.0</code>”.
               <ul>
                 <li><span class="assert must">Because this specification does not retroactively define extended feature strings for DOM Level 2 Events, using the <a href="http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-5CED94D7"><code>DOMImplementation.hasFeature()</code></a> method with extended feature strings with a version string “<code>2.0</code>” must return false.</span><span class="warning" id="_42"><strong>Warning!</strong> Because this mechanism for discrete feature strings was not defined in earlier DOM Events specifications, older user agents which support those specifications but not this one may report false negatives in terms of supporting particular features.  For example, a browser which supports the <a class="eventtype" href="#event-type-click"><code>click</code></a> event type as defined in DOM Level 2 Events, but does not support this specification, is likely to return <code>false</code> to the method call <code>document.implementation.hasFeature("Events.click", "")</code>.  The content author should not take this for definitive proof that the implementation does not support the <a class="eventtype" href="#event-type-click"><code>click</code></a> event type, but rather that other means of testing are required in that instance.  This method is best used as a means to detect positive results, not negative ones.  However, it is expected that this will prove of sufficient utility in many cases to justify its use.</span></li>
                 <li><span class="assert must">A <a class="def" href="#glossary-user-agent">user agent</a> which supports an event type in a manner conforming to DOM Level 2 Events but not conforming to DOM Level 3 Events must not report a positive result to that extended feature string, regardless of the value of the version string.</span></li>
@@ -437,7 +437,7 @@
         <p class="1st">Some of the following term definitions have been borrowed or modified from similar definitions in other W3C or standards documents. See the links within the definitions for more information.</p>
         <dl id="glossary-list">
           <dt id="glossary-activation-behavior"><dfn>activation behavior</dfn></dt>
-          <dd>The action taken when an <a class="def" href="#glossary-event">event</a>, typically initiated by users through an input device, causes an element to fulfill a defined task.  The task may be defined for that element by the <a class="def" href="#glossary-host-language">host language</a>, or by author-defined variables, or both.  The default task for any given element may be a generic action, or may be unique to that element.  For example, the activation behavior of an HTML or SVG <code>&lt;a&gt;</code> element shall be to cause the <a class="def" href="#glossary-user-agent">user agent</a> to traverse the link specified in the <code>href</code> attribute, with the further optional parameter of specifying the browsing context for the traversal (such as the current window or tab, a named window, or a new window); the activation behavior of an HTML <code>&lt;input&gt;</code> element with the <code>type</code> attribute value <code>submit</code> shall be to send the values of the form elements to an author-defined IRI by the author-defined HTTP method.  See <a href="#event-flow-activation">Activation triggers and behavior</a> for more details.</dd>
+          <dd>The action taken when an <a class="def" href="#glossary-event">event</a>, typically initiated by users through an input device, causes an element to fulfill a defined task.  The task may be defined for that element by the <a class="def" href="#glossary-host-language">host language</a>, or by author-defined variables, or both.  The default task for any given element may be a generic action, or may be unique to that element.  For example, the activation behavior of an HTML or SVG <code>&lt;a&gt;</code> element must be to cause the <a class="def" href="#glossary-user-agent">user agent</a> to traverse the link specified in the <code>href</code> attribute, with the further optional parameter of specifying the browsing context for the traversal (such as the current window or tab, a named window, or a new window); the activation behavior of an HTML <code>&lt;input&gt;</code> element with the <code>type</code> attribute value <code>submit</code> must be to send the values of the form elements to an author-defined IRI by the author-defined HTTP method.  See <a href="#event-flow-activation">Activation triggers and behavior</a> for more details.</dd>
 
           <dt id="glossary-activation-trigger"><dfn>activation trigger</dfn></dt>
           <dd>An event which is defined to initiate an <a class="def" href="#glossary-activation-behavior">activation behavior</a>.  Refer to <a href="#event-flow-activation">Activation triggers and behavior</a> for more details.</dd>
@@ -467,11 +467,11 @@
           <dd>The <code>defaultView</code> is an object which implements the <a href="http://www.w3.org/TR/DOM-Level-2-Views/views.html#Views-AbstractView" title="Document Object Model Views"><code>AbstractView</code> interface</a> of the <code>Document</code>'s <a href="http://www.w3.org/TR/DOM-Level-2-Views/views.html#Views-DocumentView" title="Document Object Model Views"><code>DocumentView</code> interface</a>, which serves as a reference to the containing frame or window.  This interface may also be accessed as the <code>Window</code> interface in many implementations.</dd>
 
           <dt id="glossary-delta"><dfn>delta</dfn></dt>
-          <dd>The distance an input device using the <a href="#events-wheelevents">WheelEvent</a> interface (such as a mouse wheel) has rotated around its axis.  The value of a <a class="def" href="#glossary-delta">delta</a> shall be a integer indicating a distance, measured as the number of <a class="def" href="#glossary-roll">rolls</a> the wheel has been <a class="def" href="#events-WheelEvent-rotation">rotated</a>. A positive value shall indicate that the wheel has been <a class="def" href="#events-WheelEvent-rotation">rotated</a> towards the user on vertically-aligned devices or in a right-hand manner on horizontally-aligned devices, and a negative value shall indicate that the wheel has been <a class="def" href="#events-WheelEvent-rotation">rotated</a> away from the user on vertically-aligned devices or in a left-hand manner on horizontally aligned devices.  The default value of a delta attribute shall be <code>0</code>.
+          <dd>The distance an input device using the <a href="#events-wheelevents">WheelEvent</a> interface (such as a mouse wheel) has rotated around its axis.  The value of a <a class="def" href="#glossary-delta">delta</a> must be a integer indicating a distance, measured as the number of <a class="def" href="#glossary-roll">rolls</a> the wheel has been <a class="def" href="#events-WheelEvent-rotation">rotated</a>. A positive value must indicate that the wheel has been <a class="def" href="#events-WheelEvent-rotation">rotated</a> towards the user on vertically-aligned devices or in a right-hand manner on horizontally-aligned devices, and a negative value must indicate that the wheel has been <a class="def" href="#events-WheelEvent-rotation">rotated</a> away from the user on vertically-aligned devices or in a left-hand manner on horizontally aligned devices.  The default value of a delta attribute must be <code>0</code>.
           </dd>
 
           <dt id="glossary-deprecated"><dfn>deprecated</dfn></dt>
-          <dd>Features marked as deprecated are included in the specification as reference to older implementations or specifications, but are optional and discouraged.  Only features which have existing or in-progress replacements shall be deprecated in this specification.  Implementations which do not already include support for the feature may implement deprecated features for reasons of backwards compatibility with existing content, but content authors creating content should not use deprecated features, unless there is no other way to solve a use case.  Other specifications which reference this specification should not use deprecated features, but should point instead to the replacements of which the feature is deprecated in favor.  Features marked as deprecated in this specification are expected to be dropped from future specifications.</dd>
+          <dd>Features marked as deprecated are included in the specification as reference to older implementations or specifications, but are optional and discouraged.  Only features which have existing or in-progress replacements must be deprecated in this specification.  Implementations which do not already include support for the feature may implement deprecated features for reasons of backwards compatibility with existing content, but content authors creating content should not use deprecated features, unless there is no other way to solve a use case.  Other specifications which reference this specification should not use deprecated features, but should point instead to the replacements of which the feature is deprecated in favor.  Features marked as deprecated in this specification are expected to be dropped from future specifications.</dd>
 
           <dt id="glossary-dispatch"><dfn>dispatch</dfn></dt>
           <dd>To create an event with attributes and methods appropriate to its type and context, and propagate it through the DOM tree in the specified manner. Interchangeable with the term “<a href="#glossary-fire">fire</a>", e.g., “fire a 'click' event” or “dispatch a 'load' event”.</dd>
@@ -544,7 +544,7 @@
           <dd>In the context of <a class="def" href="#glossary-event">events</a>, a phase is set of logical traversals from node to node along the DOM tree, from the <a class="def" href="#glossary-defaultView">defaultView</a> (window), to the <code>Document</code> object, <a class="def" href="#glossary-root-element">root element</a> down to the <a class="def" href="#glossary-event-target">event target</a> (<a class="def" href="#glossary-capture-phase">capture phase</a>), at the <a class="def" href="#glossary-event-target">event target</a> itself (<a class="def" href="#glossary-target-phase">target phase</a>), and back up to the same chain (<a class="def" href="#glossary-bubbling-phase">bubbling phase</a>).</dd>
 
           <dt id="glossary-propagation-path"><dfn>propagation path</dfn></dt>
-          <dd>The ordered set of <a class="def" href="#glossary-event-target">event targets</a> though which an <a class="def" href="#glossary-event">event</a> object will pass sequentially on the way to and back from the <a class="def" href="#glossary-proximal-event-target">proximal event target</a>.  As the event propagates, each <a class="def" href="#glossary-event-target">event target</a> in the propagation path shall in turn be set as the <a href="#events-event-type-currentTarget"><code>Event.currentTarget</code></a>.  The propagation path is initially comprised of one or more <a class="def" href="#glossary-event-phase">event phases</a> as defined by the <a class="def" href="#glossary-event-type">event type</a>, but may be interrupted.  Also known as an <em>event target chain</em>.</dd>
+          <dd>The ordered set of <a class="def" href="#glossary-event-target">event targets</a> though which an <a class="def" href="#glossary-event">event</a> object will pass sequentially on the way to and back from the <a class="def" href="#glossary-proximal-event-target">proximal event target</a>.  As the event propagates, each <a class="def" href="#glossary-event-target">event target</a> in the propagation path must in turn be set as the <a href="#events-event-type-currentTarget"><code>Event.currentTarget</code></a>.  The propagation path is initially comprised of one or more <a class="def" href="#glossary-event-phase">event phases</a> as defined by the <a class="def" href="#glossary-event-type">event type</a>, but may be interrupted.  Also known as an <em>event target chain</em>.</dd>
 
           <dt id="glossary-proximal-event-target"><dfn>proximal event target</dfn></dt>
           <dd>The proximal event target is the object representing the <a class="def" href="#glossary-event-target">event target</a> to which an <a class="def" href="#glossary-event">event</a> is targeted using the DOM event flow.  The proximal event target is the value of the <a href="#events-event-type-target">Event.target</a> attribute.</dd>
@@ -568,7 +568,7 @@
           <dd>The process by which an <a class="def" href="#glossary-event">event</a> can be handled by the <a class="def" href="#glossary-proximal-event-target">proximal event target</a>.  See the description of the <a href="#target-phase">target phase</a> in the context of event flow for more details.</dd>
 
           <dt id="glossary-topmost-event-target"><dfn>topmost event target</dfn></dt>
-          <dd>The <a class="def" href="#glossary-topmost-event-target">topmost event target</a> shall be the element highest in the rendering order which is capable of being an <a class="def" href="#glossary-event-target">event target</a>.  In this case, 'top' shall refer not to the position on the screen, but the logical order of the element in relation to other elements in drawing or stacking order on the z-axis (where the x-axis is the screen width and the y-axis is the screen height).  In HTML and CSS, or in SVG, this is controlled by the document order, as modified in HTML and CSS by the <code>'z-index'</code> property.  In some cases, such as when using some values of the SVG <code>'pointer-events'</code> property, the topmost element may not receive pointer events, in which case, the next element in z-index order which can receive pointer-events is the <a class="def" href="#glossary-topmost-event-target">topmost event target</a>.  Note that visibility of the element does not necessarily affect its ability to be the <a class="def" href="#glossary-topmost-event-target">topmost event target</a>, since an element which is hidden by use of the CSS <code>'visibility'</code> property can still receive pointer events (though not one with a <code>'display'</code> property of <code>none</code>), and the <a class="def" href="#glossary-topmost-event-target">topmost event target</a> may be completely obscured by another element which cannot receive pointer events.  Unless otherwise noted, there is only one <a class="def" href="#glossary-topmost-event-target">topmost event target</a> in any event.  For specific details regarding hit testing and stacking order, refer to the <a class="def" href="#glossary-host-language">host language</a>.</dd>
+          <dd>The <a class="def" href="#glossary-topmost-event-target">topmost event target</a> must be the element highest in the rendering order which is capable of being an <a class="def" href="#glossary-event-target">event target</a>.  In this case, 'top' must refer not to the position on the screen, but the logical order of the element in relation to other elements in drawing or stacking order on the z-axis (where the x-axis is the screen width and the y-axis is the screen height).  In HTML and CSS, or in SVG, this is controlled by the document order, as modified in HTML and CSS by the <code>'z-index'</code> property.  In some cases, such as when using some values of the SVG <code>'pointer-events'</code> property, the topmost element may not receive pointer events, in which case, the next element in z-index order which can receive pointer-events is the <a class="def" href="#glossary-topmost-event-target">topmost event target</a>.  Note that visibility of the element does not necessarily affect its ability to be the <a class="def" href="#glossary-topmost-event-target">topmost event target</a>, since an element which is hidden by use of the CSS <code>'visibility'</code> property can still receive pointer events (though not one with a <code>'display'</code> property of <code>none</code>), and the <a class="def" href="#glossary-topmost-event-target">topmost event target</a> may be completely obscured by another element which cannot receive pointer events.  Unless otherwise noted, there is only one <a class="def" href="#glossary-topmost-event-target">topmost event target</a> in any event.  For specific details regarding hit testing and stacking order, refer to the <a class="def" href="#glossary-host-language">host language</a>.</dd>
 
           <dt id="glossary-tree"><dfn>tree</dfn></dt>
           <dd>A data structure that represents a document as a hierarchical set of nodes with child-parent-sibling relationships, i.e., each node having one or more possible ancestors (nodes higher in the hierarchy in a direct lineage), one or more possible descendants (nodes lower in the hierarchy in a direct lineage), and one or more possible peers (nodes of the same level in the hierarchy, with the same immediate ancestor).</dd>
@@ -600,22 +600,22 @@
             <em>Figure 1: graphical representation of an event dispatched in a DOM tree using the DOM event flow</em>
           </p>
         </div>
-        <p>Event objects are always dispatched to the <a class="def" href="#glossary-proximal-event-target">proximal event target</a>.  <span class="assert must">At the beginning of the dispatch, implementations must first determine the event object's <a class="def" href="#glossary-propagation-path">propagation path</a>. The propagation path shall be an ordered list of <a class="def" href="#glossary-event-target">event targets</a> through which the event object must pass.</span> <span class="assert must">The last item in the list shall be the <a class="def" href="#glossary-proximal-event-target">proximal event target</a></span>; the preceding items in the list are referred to as the <em>target's ancestors</em>, and the immediately preceding item as the <em>target's parent</em>.  <span class="assert mustnot">Once determined, the propagation path must not be changed, even if an element in the propagation path is moved within the DOM or removed from the DOM.</span> As an example, in the DOM event flow event listeners might change the position of the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> in the document while the event object is being dispatched; such changes do not affect the propagation path.</p>
-        <p id="event-phase">As the next step, the event object must complete one or more <a class="def" href="#glossary-phase">event phases</a>. This specification defines three event phases: <a href="#capture-phase">capture phase</a>; <a href="#target-phase">target phase</a>; and <a href="#bubble-phase">bubble phase</a>.  Event objects complete these phases in the specified order using the partial propagation paths as defined below.  <span class="assert must">A phase shall be skipped if it is not supported, or if the event object's propagation has been stopped.</span>  For example, if the <a href="#events-event-type-canBubble"><code>Event.bubbles</code></a> attribute is set to false, the bubble phase shall be skipped, and if <a href="#events-event-type-stopPropagation"><code>Event.stopPropagation()</code></a> has been called prior to the dispatch, all phases must be skipped.</p>
+        <p>Event objects are always dispatched to the <a class="def" href="#glossary-proximal-event-target">proximal event target</a>.  <span class="assert must">At the beginning of the dispatch, implementations must first determine the event object's <a class="def" href="#glossary-propagation-path">propagation path</a>. The propagation path must be an ordered list of <a class="def" href="#glossary-event-target">event targets</a> through which the event object must pass.</span> <span class="assert must">The last item in the list must be the <a class="def" href="#glossary-proximal-event-target">proximal event target</a></span>; the preceding items in the list are referred to as the <em>target's ancestors</em>, and the immediately preceding item as the <em>target's parent</em>.  <span class="assert mustnot">Once determined, the propagation path must not be changed, even if an element in the propagation path is moved within the DOM or removed from the DOM.</span> As an example, in the DOM event flow event listeners might change the position of the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> in the document while the event object is being dispatched; such changes do not affect the propagation path.</p>
+        <p id="event-phase">As the next step, the event object must complete one or more <a class="def" href="#glossary-phase">event phases</a>. This specification defines three event phases: <a href="#capture-phase">capture phase</a>; <a href="#target-phase">target phase</a>; and <a href="#bubble-phase">bubble phase</a>.  Event objects complete these phases in the specified order using the partial propagation paths as defined below.  <span class="assert must">A phase must be skipped if it is not supported, or if the event object's propagation has been stopped.</span>  For example, if the <a href="#events-event-type-canBubble"><code>Event.bubbles</code></a> attribute is set to false, the bubble phase must be skipped, and if <a href="#events-event-type-stopPropagation"><code>Event.stopPropagation()</code></a> has been called prior to the dispatch, all phases must be skipped.</p>
         <ol>
           <li>The <strong id="capture-phase">capture phase</strong>: <span class="assert must">the event object must propagate through the target's ancestors from the <a class="def" href="#glossary-defaultView">defaultView</a> to the target's parent.</span> This phase is also known as the <em>capturing phase</em>. <span class="assert must">Event listeners registered for this phase must handle the event before it reaches its target.</span></li>
           <li>The <strong id="target-phase">target phase</strong>: <span class="assert must">the event object must arrive at the event object's <a class="def" href="#glossary-proximal-event-target">proximal event target</a>.</span> This phase is also known as the <em>at-target phase</em>. <span class="assert must">Event listeners registered for this phase must handle the event once it has reached its target.</span>  <span class="assert must">If the <a class="def" href="#glossary-event-type">event type</a> indicates that the event must not bubble, the event object must halt after completion of this phase.</span></li>
-          <li>The <strong id="bubble-phase">bubble phase</strong>: <span class="assert must">the event object propagates through the target's ancestors in reverse order, starting with the target's parent and ending with the <a class="def" href="#glossary-defaultView">defaultView</a>.</span> This phase is also known as the <em>bubbling phase</em>. <span class="assert must">Event listeners registered for this phase shall handle the event after it has reached its target.</span></li>
+          <li>The <strong id="bubble-phase">bubble phase</strong>: <span class="assert must">the event object propagates through the target's ancestors in reverse order, starting with the target's parent and ending with the <a class="def" href="#glossary-defaultView">defaultView</a>.</span> This phase is also known as the <em>bubbling phase</em>. <span class="assert must">Event listeners registered for this phase must handle the event after it has reached its target.</span></li>
         </ol>
         
         <p>
           <span class="assert must">Implementations must let event objects accomplish an event phase by applying the following steps while there are pending event targets in the partial propagation path for this phase and the event object's propagation has not been stopped through <a href="#events-event-type-stopPropagation"><code>Event.stopPropagation()</code></a>.</span>
         </p>
         <p>
-          <span class="assert must">First, the implementation must determine the <em>current target</em>. This shall be the next pending event target in the partial propagation path, starting with the first. From the perspective of an event listener this shall be the event target the listener has been registered on.</span>
+          <span class="assert must">First, the implementation must determine the <em>current target</em>. This must be the next pending event target in the partial propagation path, starting with the first. From the perspective of an event listener this must be the event target the listener has been registered on.</span>
         </p>
         <p>
-          <span class="assert must">Next, the implementation must determine the current target's <em>candidate event listeners</em>. This shall be the list of all event listeners that have been registered on the current target in their order of registration. Once determined, the candidate event listeners cannot be changed; adding or removing listeners does not affect the current target's candidate event listeners.</span>
+          <span class="assert must">Next, the implementation must determine the current target's <em>candidate event listeners</em>. This must be the list of all event listeners that have been registered on the current target in their order of registration. Once determined, the candidate event listeners cannot be changed; adding or removing listeners does not affect the current target's candidate event listeners.</span>
         </p>
         <p>
           <span class="assert must">Finally, the implementation must process all candidate event listeners in order and trigger each listener if all the following conditions are met:</span>
@@ -632,24 +632,24 @@
           </li>
         </ul>
         <p>
-          <span class="assert must">An implementation shall trigger a listener by invoking the <a href="#events-EventListener-handleEvent"><code class="method-name">EventListener.handleEvent()</code></a> method or an equivalent binding-specific mechanism.</span>
+          <span class="assert must">An implementation must trigger a listener by invoking the <a href="#events-EventListener-handleEvent"><code class="method-name">EventListener.handleEvent()</code></a> method or an equivalent binding-specific mechanism.</span>
         </p>
         <p><span class="assert must">As the final step of the event dispatch, for reasons of backwards compatibility, the implementation must reset the event object's internal-propagation and default-action-prevention states.</span> This ensures that an event object may be properly dispatched multiple times while also allowing to prevent the event objects propagation or <a class="def" href="#glossary-default-action">default actions</a> prior to the event dispatch.</p>
         <p>In the production of the <a class="def" href="#glossary-propagation-path">propagation path</a>, if the <a class="def" href="#glossary-defaultView">defaultView</a> implements the <a href="#events-EventTarget">EventTarget</a> interface, the event propagates from <a class="def" href="#glossary-defaultView">defaultView</a> to the <code>document</code> object during the <a class="def" href="#glossary-capture-phase">capture phase</a>, and from the <code>document</code> object to the <a class="def" href="#glossary-defaultView">defaultView</a> during the <a class="def" href="#glossary-bubbling-phase">bubble phase</a>.  
           <span class="note" id="_4"><strong>Note:</strong> for legacy reasons, the <a class="eventtype" href="#event-type-load"><code>load</code></a> event does not propagate to the <a class="def" href="#glossary-defaultView">defaultView</a> in HTML implementations.</span></p>
-        <p>The model defined above must be applied regardless of the specific event flow associated with an event target. Each event flow must define how the propagation path shall be determined and which event phases are supported. The <em>DOM event flow</em> is an application of this model: the propagation path for a <code>Node</code> object shall be determined by its <code>Node.parentNode</code> chain, and if applicable, the document's containing <a class="def" href="#glossary-defaultView">defaultView</a>; all events accomplish the capture and target phases; whether an event accomplishes the bubble phase shall be defined individually for each <a class="def" href="#glossary-event-type">event type</a>. An alternate application of this model can be found in [<cite><a class="informative" href="#references-DOMLS">DOM3 Load and Save</a></cite>].</p>
+        <p>The model defined above must be applied regardless of the specific event flow associated with an event target. Each event flow must define how the propagation path must be determined and which event phases are supported. The <em>DOM event flow</em> is an application of this model: the propagation path for a <code>Node</code> object must be determined by its <code>Node.parentNode</code> chain, and if applicable, the document's containing <a class="def" href="#glossary-defaultView">defaultView</a>; all events accomplish the capture and target phases; whether an event accomplishes the bubble phase must be defined individually for each <a class="def" href="#glossary-event-type">event type</a>. An alternate application of this model can be found in [<cite><a class="informative" href="#references-DOMLS">DOM3 Load and Save</a></cite>].</p>
         <p>Implementations of the DOM event model must be reentrant. Event listeners may perform actions that cause additional events to be dispatched. Such events are handled in a synchronous manner, the event propagation that causes the event listener to be triggered must resume only after the event dispatch of the new event is completed.</p>
       </div>
 <!-- div2 Events-flow -->
       <div>
         <h3><a id="event-flow-default-cancel" href="#event-flow-default-cancel">3.2 Default actions and cancelable events</a></h3>
 
-        <p>Event objects may have one or more <a class="def" href="#glossary-default-action">default actions</a> associated with them.  These are actions the implementation must perform in combination with the dispatch of the event object.  An example is the [<cite><a class="informative" href="#references-HTML5">HTML5</a></cite>] form element. When the user submits the form (e.g., by pressing on a submit button), the HTML event <code class="eventtype">submit</code> should be dispatched to the element and the <a class="def" href="#glossary-default-action">default action</a> for this <a class="def" href="#glossary-event-type">event type</a> shall be generally to send a request to a Web server with the parameters from the form.</p>
+        <p>Event objects may have one or more <a class="def" href="#glossary-default-action">default actions</a> associated with them.  These are actions the implementation must perform in combination with the dispatch of the event object.  An example is the [<cite><a class="informative" href="#references-HTML5">HTML5</a></cite>] form element. When the user submits the form (e.g., by pressing on a submit button), the HTML event <code class="eventtype">submit</code> should be dispatched to the element and the <a class="def" href="#glossary-default-action">default action</a> for this <a class="def" href="#glossary-event-type">event type</a> must be generally to send a request to a Web server with the parameters from the form.</p>
         <p><a class="def" href="#glossary-default-action">Default actions</a> should be performed after the event dispatch has been completed, but in exceptional cases also immediately before the event is dispatched.</p>
         <span class="issue"><strong>Issue:</strong> insert example here: &lt;input type="checkbox"&gt;'s .checked handling comes to mind.
         .checked is changed just before 'click' event is dispatched, and if
         default action is prevented, .checked is set to its original value.</span>
-        <p id="events-dt-cancelable-event">Some event objects are <em>cancelable</em>, meaning the <a class="def" href="#glossary-default-action">default action</a> can be prevented from occuring, or, if the <a class="def" href="#glossary-default-action">default action</a> is carried out before the dispatch, its effect may be reversed. Whether an event object is cancelable shall be indicated by the <a href="#events-event-type-canCancel"><code>Event.cancelable</code></a> attribute. Event listeners can cancel <a class="def" href="#glossary-default-action">default actions</a> of cancelable event objects by invoking the <a href="#events-event-type-preventDefault"><code>Event.preventDefault()</code></a> method, and determine whether an event has been canceled through the <a href="#events-event-type-defaultPrevented"><code>Event.defaultPrevented</code></a> attribute while the object is being dispatched, or from the return value of the <a href="#events-EventTarget-dispatchEvent"><code>EventTarget.dispatchEvent()</code></a> method for event objects dispatched by the <a class="def" href="#glossary-DOM-application">DOM application</a> itself.</p>
+        <p id="events-dt-cancelable-event">Some event objects are <em>cancelable</em>, meaning the <a class="def" href="#glossary-default-action">default action</a> can be prevented from occuring, or, if the <a class="def" href="#glossary-default-action">default action</a> is carried out before the dispatch, its effect may be reversed. Whether an event object is cancelable must be indicated by the <a href="#events-event-type-canCancel"><code>Event.cancelable</code></a> attribute. Event listeners can cancel <a class="def" href="#glossary-default-action">default actions</a> of cancelable event objects by invoking the <a href="#events-event-type-preventDefault"><code>Event.preventDefault()</code></a> method, and determine whether an event has been canceled through the <a href="#events-event-type-defaultPrevented"><code>Event.defaultPrevented</code></a> attribute while the object is being dispatched, or from the return value of the <a href="#events-EventTarget-dispatchEvent"><code>EventTarget.dispatchEvent()</code></a> method for event objects dispatched by the <a class="def" href="#glossary-DOM-application">DOM application</a> itself.</p>
         <p>This specification does not offer features to programatically query if an event object has any <a class="def" href="#glossary-default-action">default action</a> associated with it, or to associate new <a class="def" href="#glossary-default-action">default actions</a> to an event object. Other specifications may define what default actions, if any, are associated with certain event objects. Further, implementations may associate <a class="def" href="#glossary-default-action">default actions</a> with events as necessary and appropriate for that implementation. As an example, one implementation may scroll a document view by a certain amount as <a class="def" href="#glossary-default-action">default action</a> of a mouse wheel event, while another implementation may instead zoom the document as its <a class="def" href="#glossary-default-action">default action</a> for a mouse wheel event.</p>
       </div>
 <!-- div2 sync-async -->
@@ -758,7 +758,7 @@
 
 
         <p>The interfaces described in this section are fundamental to DOM Level 3 Events and must always be supported by the implementation. Together they define the feature Events 3.0.</p>
-        <p>The event types defined in this specification derive from these basic interfaces, and shall inherit all of the attributes, methods, and constants of the interfaces they derive from.  Event types defined in other specifications may similarly inherit from these basic interfaces or other interfaces defined in this specification, or may define their own interfaces.  The following chart describes the inheritance structure of interfaces defined in this specification.</p>
+        <p>The event types defined in this specification derive from these basic interfaces, and must inherit all of the attributes, methods, and constants of the interfaces they derive from.  Event types defined in other specifications may similarly inherit from these basic interfaces or other interfaces defined in this specification, or may define their own interfaces.  The following chart describes the inheritance structure of interfaces defined in this specification.</p>
         <div class="figure" style="text-align: center">
           <object type="image/svg+xml" data="images/event-inheritance.svg" width="960" height="230">
             <img src="images/event-inheritance.png" alt="graphical representation of the DOM3 Events interface inheritance" />
@@ -773,7 +773,7 @@
         <dl>
           <dt><strong>Interface <em><a id="events-Event">Event</a></em></strong> (introduced in <strong class="since">DOM Level 2</strong>)</dt>
           <dd>
-            <p>The <code>Event</code> interface is used to provide contextual information about an event to the listener processing the event. An object which implements the <code>Event</code> interface shall be passed as the parameter to an <a href="#events-EventListener"><code>EventListener</code></a>. The object passed to the event listener may also implement derived interfaces that provide access to information directly relating to the type of event they represent.</p>
+            <p>The <code>Event</code> interface is used to provide contextual information about an event to the listener processing the event. An object which implements the <code>Event</code> interface must be passed as the parameter to an <a href="#events-EventListener"><code>EventListener</code></a>. The object passed to the event listener may also implement derived interfaces that provide access to information directly relating to the type of event they represent.</p>
             <p>To create an instance of the <code>Event</code> interface, use the <a href="#events-DocumentEvent-createEvent"><code>DocumentEvent.createEvent("Event")</code></a> method call.</p>
             <dl>
               <dt>
@@ -837,10 +837,10 @@
               <dd>
                 <dl>
                   <dt><code class="attribute-name"><a id="events-event-type-canBubble">bubbles</a></code> of type <code>boolean</code>, readonly</dt>
-                  <dd><p>Used to indicate whether or not an event is a bubbling event. If the event can bubble the value shall be <code>true</code>, otherwise the value shall be <code>false</code>.</p></dd>
+                  <dd><p>Used to indicate whether or not an event is a bubbling event. If the event can bubble the value must be <code>true</code>, otherwise the value must be <code>false</code>.</p></dd>
 
                   <dt><code class="attribute-name"><a id="events-event-type-canCancel">cancelable</a></code> of type <code>boolean</code>, readonly</dt>
-                  <dd><p>Used to indicate whether or not an event can have its <a class="def" href="#glossary-default-action">default action</a> prevented (see also <a href="#event-flow-default-cancel">Default actions and cancelable events</a>). If the <a class="def" href="#glossary-default-action">default action</a> can be prevented the value shall be <code>true</code>, otherwise the value shall be <code>false</code>.</p></dd>
+                  <dd><p>Used to indicate whether or not an event can have its <a class="def" href="#glossary-default-action">default action</a> prevented (see also <a href="#event-flow-default-cancel">Default actions and cancelable events</a>). If the <a class="def" href="#glossary-default-action">default action</a> can be prevented the value must be <code>true</code>, otherwise the value must be <code>false</code>.</p></dd>
 
                   <dt><code class="attribute-name"><a id="events-event-type-currentTarget">currentTarget</a></code> of type <a href="#events-EventTarget"><code>EventTarget</code></a>, readonly</dt>
                   <dd><p>Used to indicate the <a href="#events-EventTarget"><code>EventTarget</code></a> whose <a href="#events-EventListener"><code>EventListeners</code></a> are currently being processed. This is particularly useful during the capture and bubbling phases. When used with the <a href="#event-flow">Event dispatch and DOM event flow</a>, this attribute contains the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> or a target ancestor.</p></dd>
@@ -858,7 +858,7 @@
                   <dd><p>Used to indicate the <a class="def" href="#glossary-event-target">event target</a>. This attribute contains the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> when used with the <a href="#event-flow">Event dispatch and DOM event flow</a>.</p></dd>
 
                   <dt><code class="attribute-name"><a id="events-event-type-timeStamp">timeStamp</a></code> of type <code>DOMTimeStamp</code>, readonly</dt>
-                  <dd><p>Used to specify the time at which the event was created in milliseconds relative to 1970-01-01T00:00:00Z. Due to the fact that some systems may not provide this information the value of <code>timeStamp</code> may be not available for all events. When not available, the value shall be <code>0</code>.</p></dd>
+                  <dd><p>Used to specify the time at which the event was created in milliseconds relative to 1970-01-01T00:00:00Z. Due to the fact that some systems may not provide this information the value of <code>timeStamp</code> may be not available for all events. When not available, the value must be <code>0</code>.</p></dd>
 
                   <dt><code class="attribute-name"><a id="events-event-type-type">type</a></code> of type <code>DOMString</code>, readonly</dt>
                   <dd><p>The name of the event type. The name must be a <code>DOMString</code>.  <a href="#conf-specs">Specifications that define events</a>, <a href="#conf-authors">content authors</a>, and <a href="#conf-author-tools">authoring tools</a> must use case-sensitive event type names that do not contain whitespace characters.</p></dd>
@@ -908,7 +908,7 @@
                     </code>
                   </dt>
                   <dd>
-                    <div class="method">When this method is evoked, the event must be canceled, meaning any <a class="def" href="#glossary-default-action">default actions</a> normally taken by the implementation as a result of the event must not occur (see also <a href="#event-flow-default-cancel">Default actions and cancelable events</a>). Calling this method for a non-cancelable event shall have no effect.  If an event has more than one <a class="def" href="#glossary-default-action">default action</a>, each cancelable <a class="def" href="#glossary-default-action">default action</a> must be canceled.
+                    <div class="method">When this method is evoked, the event must be canceled, meaning any <a class="def" href="#glossary-default-action">default actions</a> normally taken by the implementation as a result of the event must not occur (see also <a href="#event-flow-default-cancel">Default actions and cancelable events</a>). Calling this method for a non-cancelable event must have no effect.  If an event has more than one <a class="def" href="#glossary-default-action">default action</a>, each cancelable <a class="def" href="#glossary-default-action">default action</a> must be canceled.
 <p class="note" id="note-preventDefault-prop"><strong>Note:</strong> This method does not stop the event propagation; use <a href="#events-event-type-stopPropagation"><code>Event.stopPropagation()</code></a> or <a href="#events-event-type-stopImmediatePropagation"><code>Event.stopImmediatePropagation()</code></a> for that effect.</p>
                       <div><strong>No Parameters</strong></div>
 
@@ -921,7 +921,7 @@
                   <dt><code class="method-name"><a id="events-event-type-stopImmediatePropagation">stopImmediatePropagation</a></code> introduced in <strong class="since">DOM Level 3</strong></dt>
                   <dd>
                     <div class="method">
-                      Prevents other event listeners from being triggered and, unlike <a href="#events-event-type-stopPropagation"><code>Event.stopPropagation()</code></a> its effect shall be immediate . Once it has been called, further calls to this method have no additional effect.
+                      Prevents other event listeners from being triggered and, unlike <a href="#events-event-type-stopPropagation"><code>Event.stopPropagation()</code></a> its effect must be immediate . Once it has been called, further calls to this method have no additional effect.
                       <p class="note" id="note-stopImmediatePropagation-default"><strong>Note:</strong> This method does not prevent the <a class="def" href="#glossary-default-action">default action</a> from being invoked; use <a href="#events-event-type-preventDefault"><code>Event.preventDefault()</code></a> for that effect.</p>
                       <div><strong>No Parameters</strong></div>
 
@@ -938,7 +938,7 @@
                   </dt>
                   <dd>
                     <div class="method">
-                      Prevents other event listeners from being triggered but its effect shall be deferred until all event listeners attached on the <a href="#events-event-type-currentTarget"><code>Event.currentTarget</code></a> have been triggered. Once it has been called, further calls to this method have no additional effect.
+                      Prevents other event listeners from being triggered but its effect must be deferred until all event listeners attached on the <a href="#events-event-type-currentTarget"><code>Event.currentTarget</code></a> have been triggered. Once it has been called, further calls to this method have no additional effect.
                       <p class="note" id="note-stopPropagation-default"><strong>Note:</strong> This method does not prevent the <a class="def" href="#glossary-default-action">default action</a> from being invoked; use <a href="#events-event-type-preventDefault"><code>Event.preventDefault()</code></a> for that effect.</p>
                       <div><strong>No Parameters</strong></div>
 
@@ -1085,6 +1085,11 @@
                             
                             <dt><code class="parameter-name">listener</code> of type <a href="#events-EventListener"><code>EventListener</code></a></dt>
                             <dd>
+                              <p>The <code>listener</code> parameter must be an object which implements the <a href="#events-EventListener"><code>EventListener</code></a> interface, such as a reference to a .</p>
+                              
+                              <p>The <code>listener</code> parameter must be either an object that implements the <a href="#events-EventListener"><code>EventListener</code></a> interface, or a function.  If <code>listener</code> is a function then it is used as the callback for the event. Otherwise, if <code>listener</code> implements EventTarget, then its `handleEvent` method
+                              | is used as the callback.
+                              </p>
                               <p>The <code>listener</code> parameter takes an object defined by the author which implements the <a href="#events-EventListener"><code>EventListener</code></a> interface and contains the method to be called when the event occurs.</p>
                               <p class="note" id="addEventListener_function"><strong>Note:</strong>  The <code>listener</code> may be a reference to a function object or an inline function object literal.</p>
                             </dd>
@@ -1142,7 +1147,7 @@
 
                   <dt><code class="method-name"><a id="events-EventTarget-dispatchEvent">dispatchEvent</a></code> modified in <strong class="version">DOM Level 3</strong></dt>
                   <dd>
-                    <div class="method">Dispatches an event into the implementation's event model. The <a class="def" href="#glossary-event-target">event target</a> of the event shall be the <code>EventTarget</code> object on which <code>dispatchEvent</code> is called.
+                    <div class="method">Dispatches an event into the implementation's event model. The <a class="def" href="#glossary-event-target">event target</a> of the event must be the <code>EventTarget</code> object on which <code>dispatchEvent</code> is called.
                       <p class="warning" id="warning-dispatchEvent-untrusted"><strong>Warning!</strong>  For security reasons, events dispatched using <a href="#events-EventTarget-dispatchEvent"><code>EventTarget.dispatchEvent()</code></a> must have a <code class="attribute-name"><a href="#events-event-type-isTrusted">isTrusted</a></code> attribute value of <code>false</code>.  See <a href="#trusted-events">trusted events</a> for more details.</p>
 
                       <div class="parameters">
@@ -1155,7 +1160,7 @@
                         </div>
                       </div>
                       <!-- parameters -->
-                      <div class="return"><strong>Return Value</strong><div class="returntable"><table summary="Layout table: the first cell contains the type of the return value, the second contains a short description" border="0"><tr><td><p><code>boolean</code></p></td><td><p>Indicates whether any of the listeners which handled the event called <a href="#events-event-type-preventDefault"><code>Event.preventDefault()</code></a>. If <a href="#events-event-type-preventDefault"><code>Event.preventDefault()</code></a> was called the returned value shall be <code>false</code>, else it shall be <code>true</code>.</p></td></tr></table></div></div>
+                      <div class="return"><strong>Return Value</strong><div class="returntable"><table summary="Layout table: the first cell contains the type of the return value, the second contains a short description" border="0"><tr><td><p><code>boolean</code></p></td><td><p>Indicates whether any of the listeners which handled the event called <a href="#events-event-type-preventDefault"><code>Event.preventDefault()</code></a>. If <a href="#events-event-type-preventDefault"><code>Event.preventDefault()</code></a> was called the returned value must be <code>false</code>, else it must be <code>true</code>.</p></td></tr></table></div></div>
                       <!-- return -->
                       <div class="exceptions"><strong>Exceptions</strong><div class="exceptiontable"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tr><td><p><a href="#events-EventException"><code>EventException</code></a></p></td><td><p>UNSPECIFIED_EVENT_TYPE_ERR: Raised if the <a href="#events-event-type-type"><code>Event.type</code></a> was not specified by initializing the event before <code>dispatchEvent</code> was called. Specification of the <a href="#events-event-type-type"><code>Event.type</code></a> as <code>null</code> or an <a class="def" href="#glossary-empty-string">empty string</a> must also trigger this exception.</p><p>DISPATCH_REQUEST_ERR: Raised if the <a href="#events-Event"><code>Event</code></a> object is already being dispatched.</p></td></tr><tr><td><p><code>DOMException</code></p></td><td><p>NOT_SUPPORTED_ERR: Raised if the <a href="#events-Event"><code>Event</code></a> object has not been created using <a href="#events-DocumentEvent-createEvent"><code>DocumentEvent.createEvent()</code></a>.</p><p>INVALID_CHARACTER_ERR: Raised if <a href="#events-event-type-type"><code>Event.type</code></a> is not a <code>DOMString</code> as conforming to the restrictions in <a href="#events-event-type-type"><code>Event.type</code></a>.</p></td></tr></table></div></div>
                       <!-- exceptions --></div>
@@ -1174,13 +1179,13 @@
         <dl>
           <dt><strong>Interface <em><a id="events-EventListener">EventListener</a></em></strong> (introduced in <strong class="since">DOM Level 2</strong>)</dt>
           <dd>
-            <p>The <code>EventListener</code> interface is the primary way for handling events. Users shall implement the <code>EventListener</code> interface and register their event listener on an <a href="#events-EventTarget"><code>EventTarget</code></a>. The users should also remove their <code>EventListener</code> from its <a href="#events-EventTarget"><code>EventTarget</code></a> after they have completed using the listener.</p>
+            <p>The <code>EventListener</code> interface is the primary way to handle events.  Content authors must define on object, such as a function, which the <code>EventListener</code> interface and register their event listener on an <a href="#events-EventTarget"><code>EventTarget</code></a>. The content authors should also remove their <code>EventListener</code> from its <a href="#events-EventTarget"><code>EventTarget</code></a> after they have completed using the listener.</p>
             <p>
               <span class="assert must">Copying a <code>Node</code>, with methods such as <code>Node.cloneNode</code> or <code>Range.cloneContents</code>, must not copy the event listeners attached to it.</span>
-              <span class="assert must">Event listeners must be attached to the newly created <code>Node</code> afterwards if so desired.</span>
+              <span class="assert must">Event listeners must be attached to the newly created <code>Node</code> afterwards, if so desired.</span>
             </p>
             <p>
-              <span class="assert mustnot">Moving a <code>Node</code>, with methods <code>Document.adoptNode</code>, <code>Node.appendChild</code>, or <code>Range.extractContents</code>, shall not affect the event listeners attached to it.</span>
+              <span class="assert mustnot">Moving a <code>Node</code>, with methods <code>Document.adoptNode</code>, <code>Node.appendChild</code>, or <code>Range.extractContents</code>, must not affect the event listeners attached to it.</span>
             </p>
             <dl>
               <dt>
@@ -1206,7 +1211,7 @@
                   </dt>
                   <dd>
                     <div class="method">
-                      <p>This method shall be called whenever an event occurs of the event type for which the <code>EventListener</code> interface was registered.</p>
+                      <p>This method must be called whenever an event occurs of the event type for which the <code>EventListener</code> interface was registered.</p>
                       <div class="parameters">
                         <strong>Parameters</strong>
                         <div class="paramtable">
@@ -1347,7 +1352,7 @@
           <h4><a id="event-creation" href="#event-creation">4.5.1 Event creation</a></h4>
 
           <p>In most cases, the events dispatched by the DOM Events implementation are also created by the implementation.  However, it is possible to simulate events, such as mouse events, by creating the <a href="#events-Event"><code>Event</code></a> objects and dispatch them using the DOM Events implementation.</p>
-          <p>Creating <a href="#events-Event"><code>Event</code></a> objects that are known to the DOM Events implementation is done using <a href="#events-DocumentEvent-createEvent"><code>DocumentEvent.createEvent()</code></a>. The content author must then initialize the <a href="#events-Event"><code>Event</code></a> object by directly setting the <a href="#events-Event"><code>Event</code></a>'s property values, by using the generic <a href="#events-event-type-initEvent"><code>Event.initEvent()</code></a> method, or by using any existing event initialization method for that interface, before invoking <a href="#events-EventTarget-dispatchEvent"><code>EventTarget.dispatchEvent()</code></a>. The <a href="#events-Event"><code>Event</code></a> objects created must be known by the DOM Events implementation; otherwise an event exception shall be thrown.</p>
+          <p>Creating <a href="#events-Event"><code>Event</code></a> objects that are known to the DOM Events implementation is done using <a href="#events-DocumentEvent-createEvent"><code>DocumentEvent.createEvent()</code></a>. The content author must then initialize the <a href="#events-Event"><code>Event</code></a> object by directly setting the <a href="#events-Event"><code>Event</code></a>'s property values, by using the generic <a href="#events-event-type-initEvent"><code>Event.initEvent()</code></a> method, or by using any existing event initialization method for that interface, before invoking <a href="#events-EventTarget-dispatchEvent"><code>EventTarget.dispatchEvent()</code></a>. The <a href="#events-Event"><code>Event</code></a> objects created must be known by the DOM Events implementation; otherwise an event exception must be thrown.</p>
           <p class="example" id="example-create-event">
             <strong>Example:</strong>
             <i class="note" id="_6"><strong>To Do:</strong> Create examples of creating and dispatching an event.</i>
@@ -1363,7 +1368,7 @@
 
       <h3><a id="event-types" href="#event-types">5.1 Event Types</a></h3>
 
-      <p>Each event shall be associated with a type, called <em>event type</em> and available as the <a href="#events-event-type-type"><code class="interface-attribute">type</code></a> attribute on the event object. The event type must be of type <code>DOMString</code>.</p>
+      <p>Each event must be associated with a type, called <em>event type</em> and available as the <a href="#events-event-type-type"><code class="interface-attribute">type</code></a> attribute on the event object. The event type must be of type <code>DOMString</code>.</p>
       <div>
         <h4><a id="event-types-list" href="#event-types-list">5.1.1 List of DOM3 Event Types</a></h4>
 
@@ -2042,7 +2047,7 @@
                  </tr>
               </table>
               
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when the DOM Implementation removes from the environment the resource (such as the document) or any dependent resources (such as images, style sheets, scripts). The document shall be unloaded after the dispatch of this event type. If this event type is dispatched, implementations are required to dispatch this event at least on the <code>Document</code> node.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when the DOM Implementation removes from the environment the resource (such as the document) or any dependent resources (such as images, style sheets, scripts). The document must be unloaded after the dispatch of this event type. If this event type is dispatched, implementations are required to dispatch this event at least on the <code>Document</code> node.</p>
             </dd>
           </dl>
         </div>
@@ -2373,7 +2378,7 @@
                  </td>
                </tr>
             </table>
-            <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when an <a class="def" href="#glossary-event-target">event target</a> loses focus. The focus shall be taken from the element before the dispatch of this event type.  This event type is similar to <a class="eventtype" href="#event-type-focusout"><code>focusout</code></a>, but is dispatched after focus is shifted, and does not bubble.</p>
+            <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when an <a class="def" href="#glossary-event-target">event target</a> loses focus. The focus must be taken from the element before the dispatch of this event type.  This event type is similar to <a class="eventtype" href="#event-type-focusout"><code>focusout</code></a>, but is dispatched after focus is shifted, and does not bubble.</p>
           </dd>
         </dl>
       </div>
@@ -2404,7 +2409,7 @@
                  </td>
                </tr>
             </table>
-            <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when an <a class="def" href="#glossary-event-target">event target</a> receives focus. The focus shall be given to the element before the dispatch of this event type. This event type shall be dispatched after the event type <a class="eventtype" href="#event-type-focus"><code>focus</code></a>.</p>
+            <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when an <a class="def" href="#glossary-event-target">event target</a> receives focus. The focus must be given to the element before the dispatch of this event type. This event type must be dispatched after the event type <a class="eventtype" href="#event-type-focus"><code>focus</code></a>.</p>
             <p class="warning" id="_7"><strong>Warning!</strong> the <a class="eventtype" href="#event-type-DOMFocusIn"><code>DOMFocusIn</code></a> event type is defined in this specification for reference and completeness, but this specification <a class="def" href="#glossary-deprecated">deprecates</a> the use of this event type in favor of the related event types <a class="eventtype" href="#event-type-focus"><code>focus</code></a> and <a class="eventtype" href="#event-type-focusIn"><code>focusin</code></a>.</p>
           </dd>
         </dl>
@@ -2436,7 +2441,7 @@
                  </td>
                </tr>
             </table>
-            <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when an <a class="def" href="#glossary-event-target">event target</a> loses focus. The focus shall be taken from the element before the dispatch of this event type. This event type shall be dispatched after the event type <a class="eventtype" href="#event-type-blur"><code>blur</code></a>.</p>
+            <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when an <a class="def" href="#glossary-event-target">event target</a> loses focus. The focus must be taken from the element before the dispatch of this event type. This event type must be dispatched after the event type <a class="eventtype" href="#event-type-blur"><code>blur</code></a>.</p>
             <p class="warning" id="_8"><strong>Warning!</strong> the <a class="eventtype" href="#event-type-DOMFocusOut"><code>DOMFocusOut</code></a> event type is defined in this specification for reference and completeness, but this specification <a class="def" href="#glossary-deprecated">deprecates</a> the use of this event type in favor of the related event types <a class="eventtype" href="#event-type-blur"><code>blur</code></a> and <a class="eventtype" href="#event-type-focusout"><code>focusout</code></a>.</p>
           </dd>
         </dl>
@@ -2468,7 +2473,7 @@
                  </td>
                </tr>
             </table>
-            <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when an <a class="def" href="#glossary-event-target">event target</a> receives focus. The focus shall be given to the element before the dispatch of this event type.  This event type is similar to <a class="eventtype" href="#event-type-focusIn"><code>focusin</code></a>, but is dispatched after focus is shifted, and does not bubble.</p>
+            <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when an <a class="def" href="#glossary-event-target">event target</a> receives focus. The focus must be given to the element before the dispatch of this event type.  This event type is similar to <a class="eventtype" href="#event-type-focusIn"><code>focusin</code></a>, but is dispatched after focus is shifted, and does not bubble.</p>
           </dd>
         </dl>
       </div>
@@ -2601,7 +2606,7 @@
 
                 <dt><code class="attribute-name"><a id="events-MouseEvent-button">button</a></code> of type <code>unsigned short</code>, readonly</dt>
                 <dd>
-                  During mouse events caused by the depression or release of a mouse button, <code>button</code> shall be used to indicate which pointer device button changed state. 
+                  During mouse events caused by the depression or release of a mouse button, <code>button</code> must be used to indicate which pointer device button changed state. 
                   <p>The value of the <a href="#events-MouseEvent-button"><code>MouseEvent.button</code></a> attribute must be as follows:</p>
                   <ul>
                     <li><code>0</code> must indicate the primary button of the device (in general, the left button  or the only button on single-button devices, used to activate a user interface control or select text).</li>
@@ -2612,7 +2617,7 @@
                 </dd>
 
                 <dt><code class="attribute-name"><a id="events-MouseEvent-buttons">buttons</a></code> of type <code>unsigned short</code>, readonly</dt>
-                <dd>During mouse events caused by the depression or release of a mouse button, <code>buttons</code> shall be used to indicate which combination of mouse buttons are currently being pressed, expressed as a bitmask.  <span class="note" id="_11"><strong>Note:</strong> This should not be confused with the <a href="#events-MouseEvent-button">button</a> attribute.</span>
+                <dd>During mouse events caused by the depression or release of a mouse button, <code>buttons</code> must be used to indicate which combination of mouse buttons are currently being pressed, expressed as a bitmask.  <span class="note" id="_11"><strong>Note:</strong> This should not be confused with the <a href="#events-MouseEvent-button">button</a> attribute.</span>
                 <p>The value of the <a href="#events-MouseEvent-buttons"><code>MouseEvent.buttons</code></a> attribute must be as follows:</p>
                 <ul>
                   <li><code>0</code> must indicates no button is currently active.</li>
@@ -2745,7 +2750,7 @@
         </dd>
       </dl>
       <p>The Mouse event types are listed below. In the case of nested elements, mouse event types are always targeted at the most deeply nested element. Ancestors of the targeted element may use bubbling to obtain notification of mouse events which occur within its descendent elements.</p>
-      <p id="events-dt-current-click-count">Implementations must maintain the <em>current click count</em> when generating mouse events. This shall be a non-negative integer indicating the number of consecutive clicks of a pointing device button during a user action. The notion of consecutive clicks depends on the environment configuration. For example, a <code><a class="eventtype" href="#event-type-dblclick"><code>dblclick</code></a></code> event type might not happen if there is a long delay between the two clicks.
+      <p id="events-dt-current-click-count">Implementations must maintain the <em>current click count</em> when generating mouse events. This must be a non-negative integer indicating the number of consecutive clicks of a pointing device button during a user action. The notion of consecutive clicks depends on the environment configuration. For example, a <code><a class="eventtype" href="#event-type-dblclick"><code>dblclick</code></a></code> event type might not happen if there is a long delay between the two clicks.
       <span class="note" id="_12"><strong>Note:</strong> The value of <a href="#events-UIEvent-detail"><code>UIEvent.detail</code></a> for a number of clicks greater than 2 is platform-dependent.  For example, on the Windows OS, the click-count series seems to be <code>1, 2, 3, 2, 3</code>, while on MacOS, the click-count series seems to be <code>1, 2, 3, 4, 5, ...</code>.</span></p>
 <!-- click -->
       <h4 class="needswork">
@@ -2797,7 +2802,7 @@
           <a class="eventtype" href="#event-type-dblclick"><code>dblclick</code></a>
         </li>
       </ol>
-      <p>Note that the lag time, degree, distance, and number of <a class="eventtype" href="#event-type-mousemove"><code>mousemove</code></a> events allowed between the <a class="eventtype" href="#event-type-mousedown"><code>mousedown</code></a> and <a class="eventtype" href="#event-type-mouseup"><code>mouseup</code></a> events while still firing a <a class="eventtype" href="#event-type-click"><code>click</code></a> or <a class="eventtype" href="#event-type-dblclick"><code>dblclick</code></a> event shall be implementation-, device-, and platform-specific.  Each implementation should determine the appropriate hysteresis tolerance, but in general should fire <a class="eventtype" href="#event-type-click"><code>click</code></a> and <a class="eventtype" href="#event-type-dblclick"><code>dblclick</code></a> events when the event target of the associated <a class="eventtype" href="#event-type-mousedown"><code>mousedown</code></a> and <a class="eventtype" href="#event-type-mouseup"><code>mouseup</code></a> events is the same element with no <a class="eventtype" href="#event-type-mouseout"><code>mouseout</code></a> or <a class="eventtype" href="#event-type-mouseleave"><code>mouseleave</code></a> events intervening, and should not fire <a class="eventtype" href="#event-type-click"><code>click</code></a> and <a class="eventtype" href="#event-type-dblclick"><code>dblclick</code></a> events when the event target of the associated <a class="eventtype" href="#event-type-mousedown"><code>mousedown</code></a> and <a class="eventtype" href="#event-type-mouseup"><code>mouseup</code></a> events is different.</p>
+      <p>Note that the lag time, degree, distance, and number of <a class="eventtype" href="#event-type-mousemove"><code>mousemove</code></a> events allowed between the <a class="eventtype" href="#event-type-mousedown"><code>mousedown</code></a> and <a class="eventtype" href="#event-type-mouseup"><code>mouseup</code></a> events while still firing a <a class="eventtype" href="#event-type-click"><code>click</code></a> or <a class="eventtype" href="#event-type-dblclick"><code>dblclick</code></a> event must be implementation-, device-, and platform-specific.  Each implementation should determine the appropriate hysteresis tolerance, but in general should fire <a class="eventtype" href="#event-type-click"><code>click</code></a> and <a class="eventtype" href="#event-type-dblclick"><code>dblclick</code></a> events when the event target of the associated <a class="eventtype" href="#event-type-mousedown"><code>mousedown</code></a> and <a class="eventtype" href="#event-type-mouseup"><code>mouseup</code></a> events is the same element with no <a class="eventtype" href="#event-type-mouseout"><code>mouseout</code></a> or <a class="eventtype" href="#event-type-mouseleave"><code>mouseleave</code></a> events intervening, and should not fire <a class="eventtype" href="#event-type-click"><code>click</code></a> and <a class="eventtype" href="#event-type-dblclick"><code>dblclick</code></a> events when the event target of the associated <a class="eventtype" href="#event-type-mousedown"><code>mousedown</code></a> and <a class="eventtype" href="#event-type-mouseup"><code>mouseup</code></a> events is different.</p>
 
 <!-- click -->
       <div class="event-definition assert must">
@@ -2819,7 +2824,7 @@
                   <ul>
                     <li><a href="#events-event-type-target"><code class="attribute-name">Event.target</code></a>: <a class="def" href="#glossary-topmost-event-target">topmost event target</a></li>
                     <li><a href="#events-UIEvent-view"><code class="attribute-name">UIEvent.view</code></a>: <a class="def" href="#glossary-defaultView"><code class="attribute-value">defaultView</code></a></li>
-                    <li><a href="#events-UIEvent-detail"><code class="attribute-name">UIEvent.detail</code></a>: indicates the <a href="#events-dt-current-click-count">current click count</a>; the attribute value shall be <code>1</code> when the user begins this action and increments by <code>1</code> for each click.</li>
+                    <li><a href="#events-UIEvent-detail"><code class="attribute-name">UIEvent.detail</code></a>: indicates the <a href="#events-dt-current-click-count">current click count</a>; the attribute value must be <code>1</code> when the user begins this action and increments by <code>1</code> for each click.</li>
                     <li><a href="#events-MouseEvent-screenX"><code class="attribute-name">MouseEvent.screenX</code></a>: value based on the pointer position on the screen</li>
                     <li><a href="#events-MouseEvent-screenY"><code class="attribute-name">MouseEvent.screenY</code></a>: value based on the pointer position on the screen</li>
                     <li><a href="#events-MouseEvent-clientX"><code class="attribute-name">MouseEvent.clientX</code></a>: value based on the pointer position within the viewport</li>
@@ -2851,19 +2856,19 @@
             <ul>
               <li><em>Left click</em> (<a href="#events-MouseEvent-button"><code>MouseEvent.button</code></a> value is <code>0</code>, <a href="#events-MouseEvent-buttons"><code>MouseEvent.buttons</code></a> value is <code>1</code>):
                 <ul>
-                  <li>If the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> has associated activation behavior, the <a class="def" href="#glossary-default-action">default action</a> shall be to execute that activation behavior (see <a href="#event-flow-activation">Activation triggers and behavior</a>).</li>
-                  <li>If the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> is focusable, the <a class="def" href="#glossary-default-action">default action</a> shall be to give that element document focus.</li>
+                  <li>If the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> has associated activation behavior, the <a class="def" href="#glossary-default-action">default action</a> must be to execute that activation behavior (see <a href="#event-flow-activation">Activation triggers and behavior</a>).</li>
+                  <li>If the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> is focusable, the <a class="def" href="#glossary-default-action">default action</a> must be to give that element document focus.</li>
                 </ul>
               </li>
               <li><em>Right click</em> (<a href="#events-MouseEvent-button"><code>MouseEvent.button</code></a> value is <code>1</code>, <a href="#events-MouseEvent-buttons"><code>MouseEvent.buttons</code></a> value is <code>2</code>):
                 <ul>
-                  <li>The <a class="def" href="#glossary-default-action">default action</a> shall be to provide a context menu of options related to that <a class="def" href="#glossary-proximal-event-target">proximal event target</a>.</li>
+                  <li>The <a class="def" href="#glossary-default-action">default action</a> must be to provide a context menu of options related to that <a class="def" href="#glossary-proximal-event-target">proximal event target</a>.</li>
                 </ul>
               </li>
               <li><em>Middle click</em> (<a href="#events-MouseEvent-button"><code>MouseEvent.button</code></a> value is <code>2</code>, <a href="#events-MouseEvent-buttons"><code>MouseEvent.buttons</code></a> value is <code>4</code>):
                 <ul>
-                  <li>If the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> has associated activation behavior, the <a class="def" href="#glossary-default-action">default action</a> shall be to execute that activation behavior in an alternate fashion (such as opening a link in a new tab or window).</li>
-                  <li>If the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> has no associated activation behavior, the <a class="def" href="#glossary-default-action">default action</a> shall be device- and user-defined, but when associated with a device wheel, is often to activate an alternate scrolling or panning mode.</li>
+                  <li>If the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> has associated activation behavior, the <a class="def" href="#glossary-default-action">default action</a> must be to execute that activation behavior in an alternate fashion (such as opening a link in a new tab or window).</li>
+                  <li>If the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> has no associated activation behavior, the <a class="def" href="#glossary-default-action">default action</a> must be device- and user-defined, but when associated with a device wheel, is often to activate an alternate scrolling or panning mode.</li>
                 </ul>
               </li>
             </ul>
@@ -2913,7 +2918,7 @@
             <ul>
               <li><em>Left click</em> (<a href="#events-MouseEvent-button"><code>MouseEvent.button</code></a> value is <code>0</code>, <a href="#events-MouseEvent-buttons"><code>MouseEvent.buttons</code></a> value is <code>1</code>):
                 <ul>
-                  <li>If the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> is selectable, the <a class="def" href="#glossary-default-action">default action</a> shall be to select part or all of the selectable content; subsequent clicks may select additional selectable portions of that content.</li>
+                  <li>If the <a class="def" href="#glossary-proximal-event-target">proximal event target</a> is selectable, the <a class="def" href="#glossary-default-action">default action</a> must be to select part or all of the selectable content; subsequent clicks may select additional selectable portions of that content.</li>
                 </ul>
               </li>
             </ul>
@@ -3083,7 +3088,7 @@
                 </td>
               </tr>
             </table>
-            <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a pointing device is moved while it is over an element.  The frequency rate of events while the pointing device is moved shall be implementation-, device-, and platform-specific, but multiple consecutive <a class="eventtype" href="#event-type-mousemove"><code>mousemove</code></a> events should be fired for sustained pointer-device movement, rather than a single event for each instance of mouse movement.  Implementations are encouraged to determine the optimal frequency rate to balance responsiveness with performance.</p>
+            <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a pointing device is moved while it is over an element.  The frequency rate of events while the pointing device is moved must be implementation-, device-, and platform-specific, but multiple consecutive <a class="eventtype" href="#event-type-mousemove"><code>mousemove</code></a> events should be fired for sustained pointer-device movement, rather than a single event for each instance of mouse movement.  Implementations are encouraged to determine the optimal frequency rate to balance responsiveness with performance.</p>
           </dd>
         </dl>
       </div>
@@ -3270,19 +3275,19 @@
               <strong>Definition group <em><a id="events-ID-WheelEvent-DeltaModeCode">DeltaModeCode</a></em></strong>
             </dt>
             <dd>
-              <p>This set of constants shall be used to indicate the units of measurement for the <a href="#glossary-delta"><code>delta</code></a> values.  The precise measurement is specific to device, operating system, and application configurations.</p>
+              <p>This set of constants must be used to indicate the units of measurement for the <a href="#glossary-delta"><code>delta</code></a> values.  The precise measurement is specific to device, operating system, and application configurations.</p>
               <dl>
                 <dt><strong>Defined Constants</strong></dt>
                 <dd>
                   <dl>
                     <dt><a id="events-DOM_DELTA_PIXEL"><code class="constant-name">DOM_DELTA_PIXEL</code></a></dt>
-                    <dd>The units of measurement for the <a href="#glossary-delta"><code>delta</code></a> shall be pixels.  This is the most typical case in most operating system and implementation configurations.</dd>
+                    <dd>The units of measurement for the <a href="#glossary-delta"><code>delta</code></a> must be pixels.  This is the most typical case in most operating system and implementation configurations.</dd>
 
                     <dt><a id="events-DOM_DELTA_LINE"><code class="constant-name">DOM_DELTA_LINE</code></a></dt>
-                    <dd>The units of measurement for the <a href="#glossary-delta"><code>delta</code></a> shall be individual lines of text.  This is the case for many form controls.</dd>
+                    <dd>The units of measurement for the <a href="#glossary-delta"><code>delta</code></a> must be individual lines of text.  This is the case for many form controls.</dd>
 
                     <dt><a id="events-DOM_DELTA_PAGE"><code class="constant-name">DOM_DELTA_PAGE</code></a></dt>
-                    <dd>The units of measurement for the <a href="#glossary-delta"><code>delta</code></a> shall be pages, either defined as a single screen or as a demarcated page.</dd>
+                    <dd>The units of measurement for the <a href="#glossary-delta"><code>delta</code></a> must be pages, either defined as a single screen or as a demarcated page.</dd>
 
                   </dl>
                 </dd>
@@ -3513,7 +3518,7 @@
                 <strong>Definition group <em><a id="events-ID-TextEvent-InputMethodCode">InputMethodCode</a></em></strong>
               </dt>
               <dd>
-                <p>This set of constants shall be used to indicate the origin of the text input. In case a DOM implementation wishes to provide a new location information, a value different from the following constant values must be used.</p>
+                <p>This set of constants must be used to indicate the origin of the text input. In case a DOM implementation wishes to provide a new location information, a value different from the following constant values must be used.</p>
                 <dl>
                   <dt><strong>Defined Constants</strong></dt>
                   <dd>
@@ -3715,22 +3720,22 @@
                 <strong>Definition group <em><a id="events-ID-KeyboardEvent-KeyLocationCode">KeyLocationCode</a></em></strong>
               </dt>
               <dd>
-                <p>This set of constants shall be used to indicate the location of a key on the device. In case a DOM implementation wishes to provide a new location information, a value different from the following constant values must be used.</p>
+                <p>This set of constants must be used to indicate the location of a key on the device. In case a DOM implementation wishes to provide a new location information, a value different from the following constant values must be used.</p>
                 <dl>
                   <dt><strong>Defined Constants</strong></dt>
                   <dd>
                     <dl>
                       <dt><a id="events-DOM_KEY_LOCATION_LEFT"><code class="constant-name">DOM_KEY_LOCATION_LEFT</code></a></dt>
-                      <dd>The key activated shall be in the left key location (there is more than one possible location for this key). <i class="example" id="_18"><strong>Example:</strong> the left <code class="value">'Control'</code> key on a PC 101 Key US keyboard.</i></dd>
+                      <dd>The key activated must be in the left key location (there is more than one possible location for this key). <i class="example" id="_18"><strong>Example:</strong> the left <code class="value">'Control'</code> key on a PC 101 Key US keyboard.</i></dd>
 
                       <dt><a id="events-DOM_KEY_LOCATION_NUMPAD"><code class="constant-name">DOM_KEY_LOCATION_NUMPAD</code></a></dt>
                       <dd>The key activation originated on the numeric keypad or with a virtual key corresponding to the numeric keypad. <i class="example" id="_19"><strong>Example:</strong> the <code class="value">'1'</code> key on a PC 101 Key US keyboard located on the numeric pad.</i></dd>
 
                       <dt><a id="events-DOM_KEY_LOCATION_RIGHT"><code class="constant-name">DOM_KEY_LOCATION_RIGHT</code></a></dt>
-                      <dd>The key activation shall be in the right key location (there is more than one possible location for this key). <i class="example" id="_21"><strong>Example:</strong> the right <code class="value">'Shift'</code> key on a PC 101 Key US keyboard.</i></dd>
+                      <dd>The key activation must be in the right key location (there is more than one possible location for this key). <i class="example" id="_21"><strong>Example:</strong> the right <code class="value">'Shift'</code> key on a PC 101 Key US keyboard.</i></dd>
 
                       <dt><a id="events-DOM_KEY_LOCATION_STANDARD"><code class="constant-name">DOM_KEY_LOCATION_STANDARD</code></a></dt>
-                      <dd>The key activation shall not be distinguished as the left or right version of the key, and did not originate from the numeric keypad (or did not originate with a virtual key corresponding to the numeric keypad). <i class="example" id="_22"><strong>Example:</strong> the <code class="value">'Q'</code> key on a PC 101 Key US keyboard.</i></dd>
+                      <dd>The key activation must not be distinguished as the left or right version of the key, and did not originate from the numeric keypad (or did not originate with a virtual key corresponding to the numeric keypad). <i class="example" id="_22"><strong>Example:</strong> the <code class="value">'Q'</code> key on a PC 101 Key US keyboard.</i></dd>
 
                       <dt><a id="events-DOM_KEY_LOCATION_MOBILE"><code class="constant-name">DOM_KEY_LOCATION_MOBILE</code></a></dt>
                       <dd>The key activation originated on a mobile device, either on a physical keypad or a virtual keyboard. <i class="example" id="_23"><strong>Example:</strong> the <code class="value">'#'</code> key or softkey on a mobile device.</i></dd>
@@ -3747,11 +3752,10 @@
               <dd>
                 <dl>
                   <dt><code class="attribute-name"><a id="events-KeyboardEvent-altKey">altKey</a></code> of type <code>boolean</code>, readonly</dt>
-                  <dd><code>true</code> if the alternative (Alt) key modifier is activated.
-  <p class="note" id="_25"><strong>Note:</strong> The Option key modifier on Macintosh systems must be represented using this key modifier.</p></dd>
+                  <dd><code>true</code> if the <a href="#key-Alt"><code class="value keyname">'Alt'</code></a> (alternative) or <code class="value keyname">'Option'</code> key modifier is activated.</dd>
 
                   <dt><code class="attribute-name"><a id="events-KeyboardEvent-ctrlKey">ctrlKey</a></code> of type <code>boolean</code>, readonly</dt>
-                  <dd><p><code>true</code> if the control (Ctrl) key modifier is activated.</p></dd>
+                  <dd><p><code>true</code> if the <a href="#key-Ctrl"><code class="value keyname">'Ctrl'</code></a> (control) key modifier is activated.</p></dd>
 
                   <dt><code class="attribute-name"><a id="events-KeyboardEvent-char">char</a></code> of type <code>DOMString</code>, readonly</dt>
                   <dd><p><code>char</code> holds the character value of the key pressed.  The value must be a Unicode character string, conforming to the <a href="#key-algorithm">algorithm for determining the key value</a> defined in this specification.  For a key associated with a macro to insert multiple characters, the value of the <code>char</code> attribute will hold the entire sequence of characters.  For a key which does not have a character representation, the value must be the <a class="def" href="#glossary-empty-string">empty string</a>.</p>
@@ -3779,11 +3783,11 @@
                   <dd><p><code>true</code> if the shift (Shift) key modifier is activated.</p></dd>
 
                   <dt><code class="attribute-name"><a id="events-KeyboardEvent-repeat">repeat</a></code> of type <code>boolean</code>, readonly</dt>
-                  <dd><code>true</code> if the key has been pressed in a sustained manner.  Depending on the system configuration, holding down a key results may result in multiple consecutive <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> events, <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> events, and <a class="eventtype" href="#event-type-textinput"><code>textinput</code></a> events, for appropriate keys.   For mobile devices which have <em>long-key-press</em> behavior, the first key event with a <a href="#events-KeyboardEvent-repeat">repeat</a> attribute value of <code>'true'</code> shall serve as an indication of a <em>long-key-press</em>.  The length of time that the key must be pressed in order to begin repeating is configuration-dependent.</dd>
+                  <dd><code>true</code> if the key has been pressed in a sustained manner.  Depending on the system configuration, holding down a key results may result in multiple consecutive <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> events, <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> events, and <a class="eventtype" href="#event-type-textinput"><code>textinput</code></a> events, for appropriate keys.   For mobile devices which have <em>long-key-press</em> behavior, the first key event with a <a href="#events-KeyboardEvent-repeat">repeat</a> attribute value of <code>'true'</code> must serve as an indication of a <em>long-key-press</em>.  The length of time that the key must be pressed in order to begin repeating is configuration-dependent.</dd>
 
                   <dt><code class="attribute-name"><a id="events-KeyboardEvent-locale">locale</a></code> of type <code>DOMString</code>, readonly</dt>
                   <dd>
-                    <p>The <code>locale</code> attribute contains a BCP-47 tag [<a href="#ref-BCP-47">BCP-47</a>] indicating the locale for which the origin of the event (whether keyboard, IME, handwriting recognition software, or other input mode) is configured, e.g. "en-US". May be the <a class="def" href="#glossary-empty-string">empty string</a> when inapplicable or unknown, e.g. for pasted text, or when this information is not exposed by the underlying platform.</p>
+                    <p>The <code>locale</code> attribute contains a BCP-47 tag [<a href="#ref-BCP-47">BCP-47</a>] indicating the locale for which the keyboard originating the event is configured, e.g. "en-US". May be the <a class="def" href="#glossary-empty-string">empty string</a> when inapplicable or unknown, e.g. when this information is not exposed by the underlying platform.</p>
                     <p class="note" id="note_KeyboardEvent-locale"><strong>Note:</strong> <code>locale</code> does not necessarily indicate the locale of the data or the context in which it is being entered.  For example, a French user often may not switch to an English keyboard setting when typing English, in which case the <code>locale</code> will still indicate French.  Nor can it be used to definitively calculate the "physical" or "virtual" key associated with the event, or the character printed on that key.</p>
                   </dd>
 
@@ -3978,18 +3982,18 @@
                   </td>
                 </tr>
               </table>
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a key is pressed down. The <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event type is device dependent and relies on the capabilities of the input devices and how they are mapped in the operating system. This event type shall be generated after the <a class="def" href="#glossary-key-mapping">key mapping</a> but before the processing of an <a class="def" href="#glossary-ime">input method editor</a>, normally associated with the dispatching of a <a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a>, <a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>, or <a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a> event. This event type must be dispatched before the <a class="eventtype" href="#event-type-compositionstart"><code>keypress</code></a> and <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> events event associated with the same key.  Whether or not a <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> contributes to the generation of a text event is implementation dependent.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a key is pressed down. The <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event type is device dependent and relies on the capabilities of the input devices and how they are mapped in the operating system. This event type must be generated after the <a class="def" href="#glossary-key-mapping">key mapping</a> but before the processing of an <a class="def" href="#glossary-ime">input method editor</a>, normally associated with the dispatching of a <a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a>, <a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>, or <a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a> event. This event type must be dispatched before the <a class="eventtype" href="#event-type-compositionstart"><code>keypress</code></a> and <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> events event associated with the same key.  Whether or not a <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> contributes to the generation of a text event is implementation dependent.</p>
               <p>The default action of the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event depends upon the key:</p>
               <ul>
-                <li>if the key is associated with a character, the default action shall be to dispatch a <a class="eventtype" href="#event-type-textinput"><code>textinput</code></a> event with the character as the value of the <a href="#events-TextEvent-data"><code>TextEvent.data</code></a> attribute
+                <li>if the key is associated with a character, the default action must be to dispatch a <a class="eventtype" href="#event-type-textinput"><code>textinput</code></a> event with the character as the value of the <a href="#events-TextEvent-data"><code>TextEvent.data</code></a> attribute
                    <ul>
-                     <li>if the document's currently focused element can receive text (such as a form input or an editable text block), the default action shall be to dispatch a <a class="eventtype" href="#event-type-textinput"><code>textinput</code></a> event with the character as the value of the <a href="#events-TextEvent-data"><code>TextEvent.data</code></a> attribute, and the focused element as the value of the <a href="#events-event-type-target">Event.target</a> attribute, and for that character to be appended to the text content of that element</li>
+                     <li>if the document's currently focused element can receive text (such as a form input or an editable text block), the default action must be to dispatch a <a class="eventtype" href="#event-type-textinput"><code>textinput</code></a> event with the character as the value of the <a href="#events-TextEvent-data"><code>TextEvent.data</code></a> attribute, and the focused element as the value of the <a href="#events-event-type-target">Event.target</a> attribute, and for that character to be appended to the text content of that element</li>
                    </ul>
                  </li>
-                <li>if the key is associated with a <a class="def" href="#glossary-text-composition-system">text composition system</a>, the default action shall be to launch that system</li>
-                <li>if the key is the <code>tab</code> key, the default action shall be to shift the document focus from the currently focused element (if any) to the new focused element, as described in <a href="#events-focusevent">Focus Event Types</a></li>
-                <li>if the key is the <a href="#key-Enter"><code class="value keyname">'Enter'</code></a> or <a href="#key-Spacebar"><code class="value keyname">'Space'</code></a> key and the current focus is on a state-changing element, the default action shall be to dispatch a <a class="eventtype" href="#event-type-click"><code>click</code></a> event, and a <a class="eventtype" href="#event-type-DOMActivate"><code>DOMActivate</code></a> event if that event type is supported by the <a class="def" href="#glossary-user-agent">user agent</a> (refer to <a href="#event-flow-activation">activation triggers and behavior</a> for more details)</li>
-                <!-- <li>if the key is associated with any other event type, such as the <a class="eventtype" href="#event-type-scroll"><code>scroll</code></a> event, the default action shall be to dispatch an event of that type.</li> -->
+                <li>if the key is associated with a <a class="def" href="#glossary-text-composition-system">text composition system</a>, the default action must be to launch that system</li>
+                <li>if the key is the <code>tab</code> key, the default action must be to shift the document focus from the currently focused element (if any) to the new focused element, as described in <a href="#events-focusevent">Focus Event Types</a></li>
+                <li>if the key is the <a href="#key-Enter"><code class="value keyname">'Enter'</code></a> or <a href="#key-Spacebar"><code class="value keyname">'Space'</code></a> key and the current focus is on a state-changing element, the default action must be to dispatch a <a class="eventtype" href="#event-type-click"><code>click</code></a> event, and a <a class="eventtype" href="#event-type-DOMActivate"><code>DOMActivate</code></a> event if that event type is supported by the <a class="def" href="#glossary-user-agent">user agent</a> (refer to <a href="#event-flow-activation">activation triggers and behavior</a> for more details)</li>
+                <!-- <li>if the key is associated with any other event type, such as the <a class="eventtype" href="#event-type-scroll"><code>scroll</code></a> event, the default action must be to dispatch an event of that type.</li> -->
               </ul>
               <p>If this event is canceled, the associated event types must not be dispatched, and the associated actions must not be performed.</p>
               <p class="note" id="_29"><strong>Note:</strong> the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> and <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> events are traditionally associated with detecting any key, not just those which produce a <a class="def" href="#glossary-character-value">character value</a>.</p>
@@ -4030,7 +4034,7 @@
                   </td>
                 </tr>
               </table>
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a key is pressed down, if and only if that key normally produces a <a class="def" href="#glossary-character-value">character value</a>. The <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event type is device dependent and relies on the capabilities of the input devices and how they are mapped in the operating system. This event type shall be generated after the <a class="def" href="#glossary-key-mapping">key mapping</a> but before the processing of an <a class="def" href="#glossary-ime">input method editor</a>, normally associated with the dispatching of a <a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a>, <a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>, or <a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a> event. This event type must be dispatched after the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event and before the <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> event associated with the same key.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a key is pressed down, if and only if that key normally produces a <a class="def" href="#glossary-character-value">character value</a>. The <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event type is device dependent and relies on the capabilities of the input devices and how they are mapped in the operating system. This event type must be generated after the <a class="def" href="#glossary-key-mapping">key mapping</a> but before the processing of an <a class="def" href="#glossary-ime">input method editor</a>, normally associated with the dispatching of a <a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a>, <a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>, or <a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a> event. This event type must be dispatched after the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event and before the <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> event associated with the same key.</p>
               <p class="note" id="_31"><strong>Note:</strong> the <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> event is traditionally associated with detecting a <a class="def" href="#glossary-character-value">character value</a> rather than a physical key, and may not be available on all keys in some configurations.</p>
               <p class="warning" id="_32"><strong>Warning!</strong> the <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> event type is defined in this specification for reference and completeness, but this specification <a class="def" href="#glossary-deprecated">deprecates</a> the use of this event type in favor of the <a class="eventtype" href="#event-type-textinput"><code>textinput</code></a> event type.</p>
             </dd>
@@ -4070,7 +4074,7 @@
                   </td>
                 </tr>
               </table>
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a key is released.  The <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event type is device dependent and relies on the capabilities of the input devices and how they are mapped in the operating system.  This event type shall be generated after the <a class="def" href="#glossary-key-mapping">key mapping</a>. This event type must be dispatched after the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> and <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> events event associated with the same key.  Whether or not a <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> contributes to the generation of a text event is implementation dependent.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a key is released.  The <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event type is device dependent and relies on the capabilities of the input devices and how they are mapped in the operating system.  This event type must be generated after the <a class="def" href="#glossary-key-mapping">key mapping</a>. This event type must be dispatched after the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> and <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> events event associated with the same key.  Whether or not a <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> contributes to the generation of a text event is implementation dependent.</p>
               <p class="note" id="_33"><strong>Note:</strong> the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> and <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> events are traditionally associated with detecting any key, not just those which produce a <a class="def" href="#glossary-character-value">character value</a>.</p>
             </dd>
           </dl>
@@ -4118,7 +4122,7 @@
 
                   <dt><code class="attribute-name"><a id="events-CompositionEvent-locale">locale</a></code> of type <code>DOMString</code>, readonly</dt>
                   <dd>
-                    <p>The <code>locale</code> attribute contains a BCP-47 tag [<a href="#ref-BCP-47">BCP-47</a>] indicating the locale for which the origin of the event (whether keyboard, IME, handwriting recognition software, or other input mode) is configured, e.g. "en-US". May be the <a class="def" href="#glossary-empty-string">empty string</a> when inapplicable or unknown, e.g. for pasted text, or when this information is not exposed by the underlying platform or application.</p>
+                    <p>The <code>locale</code> attribute contains a BCP-47 tag [<a href="#ref-BCP-47">BCP-47</a>] indicating the locale for which the IME originating the event is configured, e.g. "ja", "zh-Hans", "ko". May be the <a class="def" href="#glossary-empty-string">empty string</a> when inapplicable or unknown, e.g. when this information is not exposed by the underlying platform or application.</p>
                     <p class="note" id="note_CompositionEvent-locale"><strong>Note:</strong> <code>locale</code> does not necessarily indicate the locale of the data or the context in which it is being entered.  For example, a French user often may not switch to an English keyboard setting when typing English, in which case the <code>locale</code> will still indicate French, even though the data is actually English.  Similarly, an IME application may not distinguish between the locale of Chinese and Kanji characters.</p>
                   </dd>
 
@@ -4218,7 +4222,7 @@
                 </tr>
               </table>
               
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a <a class="def" href="#glossary-text-composition-system">text composition system</a> is invoked in preparation for composing a passage of text.  This event type is device-dependent, and may rely upon the capabilities of the text conversion system and how it is mapped into the operating system.  When a keyboard is used to feed an input method editor, this event type is generated after a <code>keydown</code> event, but speech or handwriting recognition systems may send this event type without keyboard events.  Some implemenations may populate the <a href="#events-CompositionEvent-data"><code>data</code></a> attribute of the <a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a> event with the text currently selected in the document (for editing and replacement); otherwise, the value of the <a href="#events-CompositionEvent-data"><code>data</code></a> attribute shall be  the <a class="def" href="#glossary-empty-string">empty string</a>.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a <a class="def" href="#glossary-text-composition-system">text composition system</a> is invoked in preparation for composing a passage of text.  This event type is device-dependent, and may rely upon the capabilities of the text conversion system and how it is mapped into the operating system.  When a keyboard is used to feed an input method editor, this event type is generated after a <code>keydown</code> event, but speech or handwriting recognition systems may send this event type without keyboard events.  Some implemenations may populate the <a href="#events-CompositionEvent-data"><code>data</code></a> attribute of the <a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a> event with the text currently selected in the document (for editing and replacement); otherwise, the value of the <a href="#events-CompositionEvent-data"><code>data</code></a> attribute must be  the <a class="def" href="#glossary-empty-string">empty string</a>.</p>
               <p>This event must be dispatched immediately before a <a class="def" href="#glossary-text-composition-system">text composition system</a> is launched, and before the DOM is modified due to the composition process.  The default action of this event is to launch the appropriate <a class="def" href="#glossary-text-composition-system">text composition system</a>.  If this event is canceled, the <a class="def" href="#glossary-text-composition-system">text composition system</a> must not be launched.  Note that canceling the <a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a> <em>event type</em> is distinct from canceling the <a class="def" href="#glossary-text-composition-system">text composition system</a> session (e.g., by hitting a cancel button or closing an <a class="def" href="#glossary-ime">IME</a> window).</p>
               <!-- <p>(<i class="issue" id="issue-composition_events"><strong>Issue:</strong> see <a href="http://lists.w3.org/Archives/Public/www-dom/2009JulSep/0143.html" title="Extra notes on composition events from Daniel Danilatos on 2009-08-07 (www-dom@w3.org from July to September 2009)">Extra notes on composition events</a> for more details.</i>)</p> -->
             </dd>
@@ -4319,7 +4323,7 @@
 
         <p>This module defines the feature MutationEvents 3.0 and depends on the feature Events 3.0.</p>
         <p>The mutation and mutation name event modules are designed to allow notification of any changes to the structure of a document, including attribute, text, or name modifications. It may be noted that none of the event types associated with the modules are designated as cancelable. This stems from the fact that it is very difficult to make use of existing DOM interfaces which cause document modifications if any change to the document might or might not take place due to cancelation of the resulting event. Although this is still a desired capability, it was decided that it would be better left until the addition of transactions into the DOM.</p>
-<!-- <p class="issue">Note that nodes that are not in the document, such as elements freshly created, or elements removed from the DOM, shall not fire mutation events when changed.  For example, if an element is created but not yet inserted into the document, then an existing element located in the document shall be moved from its current location to be a child of the new element, there must be one mutation event, for removing the existing element from its previous location, but no event must fire for insertion of the element into the new element, regardless of any assigned mutation event listeners.</p>
+<!-- <p class="issue">Note that nodes that are not in the document, such as elements freshly created, or elements removed from the DOM, must not fire mutation events when changed.  For example, if an element is created but not yet inserted into the document, then an existing element located in the document must be moved from its current location to be a child of the new element, there must be one mutation event, for removing the existing element from its previous location, but no event must fire for insertion of the element into the new element, regardless of any assigned mutation event listeners.</p>
           <p class="issue">?What happens to event listeners on an element when it is removed from the tree, or moved elsewhere in the tree?</p> -->
         <p>Many single modifications of the tree can cause multiple mutation events to be dispatched. Rather than attempt to specify the ordering of mutation events due to every possible modification of the tree, the ordering of these events is left to the implementation.</p>
         <p class="warning" id="_34"><strong>Warning!</strong>  The <a href="#events-MutationEvent">MutationEvent interface</a> was introduced in DOM Level 2 Events, but has not yet been completely and interoperably implemented across <a class="def" href="#glossary-user-agent">user agents</a>.  In addition, there have been critiques that the interface, as designed, introduces a performance and implementation challenge.  A new specification is under development with the aim of addressing the use cases that mutation events solves, but in more performant manner.  Thus, this specification describes mutation events for reference and completeness of legacy behavior, but <a class="def" href="#glossary-deprecated">deprecates</a> the use of both the <a href="#events-MutationEvent"><code>MutationEvent</code></a> interface and the <a href="#events-MutationNameEvent"><code>MutationNameEvent</code></a> interface.</p>
@@ -4399,7 +4403,7 @@
                   <dd><p><code>prevValue</code> indicates the previous value of the <code>Attr</code> node in <a class="eventtype" href="#event-type-DOMAttrModified"><code>DOMAttrModified</code></a> events, and of the <code>CharacterData</code> node in <a class="eventtype" href="#event-type-DOMCharacterDataModified"><code>DOMCharacterDataModified</code></a> events.</p></dd>
 
                   <dt><code class="attribute-name"><a id="events-MutationEvent-relatedNode">relatedNode</a></code> of type <code>Node</code>, readonly</dt>
-                  <dd><p><code>relatedNode</code> shall be used to identify a secondary node related to a mutation event. For example, if a mutation event is dispatched to a node indicating that its parent has changed, the <code>relatedNode</code> shall be the changed parent. If an event is instead dispatched to a subtree indicating a node was changed within it, the <code>relatedNode</code> shall be the changed node. In the case of the <a class="eventtype" href="#event-type-DOMAttrModified"><code>DOMAttrModified</code></a> event it indicates the <code>Attr</code> node which was modified, added, or removed.</p></dd>
+                  <dd><p><code>relatedNode</code> must be used to identify a secondary node related to a mutation event. For example, if a mutation event is dispatched to a node indicating that its parent has changed, the <code>relatedNode</code> must be the changed parent. If an event is instead dispatched to a subtree indicating a node was changed within it, the <code>relatedNode</code> must be the changed node. In the case of the <a class="eventtype" href="#event-type-DOMAttrModified"><code>DOMAttrModified</code></a> event it indicates the <code>Attr</code> node which was modified, added, or removed.</p></dd>
 
                 </dl>
               </dd>
@@ -4489,7 +4493,7 @@
                 </tr>
               </table>
 
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event after an <code>Attr.value</code> has been modified and after an <code>Attr</code> node has been added to or removed from an <code>Element</code>. The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event shall be the <code>Element</code> node where the change occurred. It is implementation dependent whether this event type occurs when the children of the <code>Attr</code> node are changed in ways that do not affect the value of <code>Attr.value</code>.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event after an <code>Attr.value</code> has been modified and after an <code>Attr</code> node has been added to or removed from an <code>Element</code>. The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event must be the <code>Element</code> node where the change occurred. It is implementation dependent whether this event type occurs when the children of the <code>Attr</code> node are changed in ways that do not affect the value of <code>Attr.value</code>.</p>
               <p class="warning" id="_44"><strong>Warning!</strong> the <a class="eventtype" href="#event-type-DOMAttrModified"><code>DOMAttrModified</code></a> event type is defined in this specification for reference and completeness, but this specification <a class="def" href="#glossary-deprecated">deprecates</a> the use of this event type.</p>
             </dd>
           </dl>
@@ -4523,7 +4527,7 @@
                   </td>
                 </tr>
               </table>
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event after <code>CharacterData.data</code> or <code>ProcessingInstruction.data</code> have been modified, but the node itself has not been inserted or deleted.  The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event shall be the <code>CharacterData</code> node or the <code>ProcessingInstruction</code> node.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event after <code>CharacterData.data</code> or <code>ProcessingInstruction.data</code> have been modified, but the node itself has not been inserted or deleted.  The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event must be the <code>CharacterData</code> node or the <code>ProcessingInstruction</code> node.</p>
               <p class="warning" id="_45"><strong>Warning!</strong> the <a class="eventtype" href="#event-type-DOMCharacterDataModified"><code>DOMCharacterDataModified</code></a> event type is defined in this specification for reference and completeness, but this specification <a class="def" href="#glossary-deprecated">deprecates</a> the use of this event type.</p>
             </dd>
           </dl>
@@ -4559,7 +4563,7 @@
                 </tr>
               </table>
               
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event type when a node other than an <code>Attr</code> node has been added as a child of another node.  A <a class="def" href="#glossary-user-agent">user agent</a> may dispatch this event when an <code>Attr</code> node has been added to an <code>Element</code> node (see <a href="#DOMNodeInserted-attr">note</a> below). This event must be dispatched after the insertion has taken place. The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event shall be the node being inserted.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event type when a node other than an <code>Attr</code> node has been added as a child of another node.  A <a class="def" href="#glossary-user-agent">user agent</a> may dispatch this event when an <code>Attr</code> node has been added to an <code>Element</code> node (see <a href="#DOMNodeInserted-attr">note</a> below). This event must be dispatched after the insertion has taken place. The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event must be the node being inserted.</p>
               <p class="note" id="DOMNodeInserted-attr"><strong>Note:</strong> for detecting attribute insertion, the <a href="#event-type-DOMAttrModified">DOMAttrModified</a> event type should be used instead.</p>
               <p class="warning" id="_36"><strong>Warning!</strong> the <a class="eventtype" href="#event-type-DOMNodeInserted"><code>DOMNodeInserted</code></a> event type is defined in this specification for reference and completeness, but this specification <a class="def" href="#glossary-deprecated">deprecates</a> the use of this event type.</p>
             </dd>
@@ -4595,7 +4599,7 @@
                 </tr>
               </table>
               
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a node has been inserted into a document, either through direct insertion of the node or insertion of a subtree in which it is contained; a <a class="def" href="#glossary-user-agent">user agent</a> may optionally treat an <code>Attr</code> node as part of an <code>Element</code>'s subtree. This event must be dispatched after the insertion has taken place. The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event shall be the node being inserted. If the node is being directly inserted, the event type <a class="eventtype" href="#event-type-DOMNodeInserted"><code>DOMNodeInserted</code></a> must occur before this event type.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a node has been inserted into a document, either through direct insertion of the node or insertion of a subtree in which it is contained; a <a class="def" href="#glossary-user-agent">user agent</a> may optionally treat an <code>Attr</code> node as part of an <code>Element</code>'s subtree. This event must be dispatched after the insertion has taken place. The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event must be the node being inserted. If the node is being directly inserted, the event type <a class="eventtype" href="#event-type-DOMNodeInserted"><code>DOMNodeInserted</code></a> must occur before this event type.</p>
               <p class="warning" id="_39"><strong>Warning!</strong> the <a class="eventtype" href="#event-type-DOMNodeInsertedIntoDocument"><code>DOMNodeInsertedIntoDocument</code></a> event type is defined in this specification for reference and completeness, but this specification <a class="def" href="#glossary-deprecated">deprecates</a> the use of this event type.</p>
             </dd>
           </dl>
@@ -4631,7 +4635,7 @@
                 </tr>
               </table>
 
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a node other than an <code>Attr</code> node is being removed from its parent node.  A <a class="def" href="#glossary-user-agent">user agent</a> may dispatch this event when an <code>Attr</code> node is being removed from its <code>ownerElement</code> (see <a href="#DOMNodeRemoved-attr">note</a> below). This event must be dispatched before the removal takes place. The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event shall be the node being removed.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a node other than an <code>Attr</code> node is being removed from its parent node.  A <a class="def" href="#glossary-user-agent">user agent</a> may dispatch this event when an <code>Attr</code> node is being removed from its <code>ownerElement</code> (see <a href="#DOMNodeRemoved-attr">note</a> below). This event must be dispatched before the removal takes place. The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event must be the node being removed.</p>
               <p class="note" id="DOMNodeRemoved-attr"><strong>Note:</strong> for reliably detecting attribute removal, the <a href="#event-type-DOMAttrModified">DOMAttrModified</a> event type should be used instead.</p>
               <p class="warning" id="_37"><strong>Warning!</strong> the <a class="eventtype" href="#event-type-DOMNodeRemoved"><code>DOMNodeRemoved</code></a> event type is defined in this specification for reference and completeness, but this specification <a class="def" href="#glossary-deprecated">deprecates</a> the use of this event type.</p>
             </dd>
@@ -4667,7 +4671,7 @@
                 </tr>
               </table>
               
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a node is being removed from a document, either through direct removal of the node or removal of a subtree in which it is contained; a <a class="def" href="#glossary-user-agent">user agent</a> may optionally treat an <code>Attr</code> node as part of an <code>Element</code>'s subtree. This event must be dispatched before the removal takes place. The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event type shall be the node being removed. If the node is being directly removed, the event type <a class="eventtype" href="#event-type-DOMNodeRemoved"><code>DOMNodeRemoved</code></a> must occur before this event type.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event when a node is being removed from a document, either through direct removal of the node or removal of a subtree in which it is contained; a <a class="def" href="#glossary-user-agent">user agent</a> may optionally treat an <code>Attr</code> node as part of an <code>Element</code>'s subtree. This event must be dispatched before the removal takes place. The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event type must be the node being removed. If the node is being directly removed, the event type <a class="eventtype" href="#event-type-DOMNodeRemoved"><code>DOMNodeRemoved</code></a> must occur before this event type.</p>
               <p class="note" id="DOMNodeRemovedFromDocument-attr"><strong>Note:</strong> for reliably detecting attribute removal, the <a href="#event-type-DOMAttrModified">DOMAttrModified</a> event type should be used instead.</p>
               <p class="warning" id="_38"><strong>Warning!</strong> the <a class="eventtype" href="#event-type-DOMNodeRemovedFromDocument"><code>DOMNodeRemovedFromDocument</code></a> event type is defined in this specification for reference and completeness, but this specification <a class="def" href="#glossary-deprecated">deprecates</a> the use of this event type.</p>
             </dd>
@@ -4704,7 +4708,7 @@
                 </tr>
               </table>
 
-              <p>This is a general event for notification of all changes to the document. It can be used instead of the more specific mutation and mutation name events. It may be dispatched after a single modification to the document or, at the implementation's discretion, after multiple changes have occurred. The latter case should generally be used to accommodate multiple changes which occur either simultaneously or in rapid succession. The target of this event shall be the lowest common parent of the changes which have taken place. This event must be dispatched after any other events caused by the mutation(s) have occurred.</p>
+              <p>This is a general event for notification of all changes to the document. It can be used instead of the more specific mutation and mutation name events. It may be dispatched after a single modification to the document or, at the implementation's discretion, after multiple changes have occurred. The latter case should generally be used to accommodate multiple changes which occur either simultaneously or in rapid succession. The target of this event must be the lowest common parent of the changes which have taken place. This event must be dispatched after any other events caused by the mutation(s) have occurred.</p>
               <p class="warning" id="_35"><strong>Warning!</strong> the <a class="eventtype" href="#event-type-DOMSubtreeModified"><code>DOMSubtreeModified</code></a> event type is defined in this specification for reference and completeness, but this specification <a class="def" href="#glossary-deprecated">deprecates</a> the use of this event type.</p>
             </dd>
           </dl>
@@ -4832,7 +4836,7 @@
                 </tr>
               </table>
               
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event after the <code>namespaceURI</code> and/or the <code>nodeName</code> of an <code>Element</code> node have been modified (e.g., the element was renamed using <code>Document.renameNode()</code>). The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event shall be the renamed <code>Element</code> node.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event after the <code>namespaceURI</code> and/or the <code>nodeName</code> of an <code>Element</code> node have been modified (e.g., the element was renamed using <code>Document.renameNode()</code>). The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event must be the renamed <code>Element</code> node.</p>
               <p class="warning" id="_47"><strong>Warning!</strong> the <a class="eventtype" href="#event-type-DOMElementNameChanged"><code>DOMElementNameChanged</code></a> event type is defined in this specification for reference and completeness, but this specification <a class="def" href="#glossary-deprecated">deprecates</a> the use of this event type.</p>
             </dd>
           </dl>
@@ -4869,7 +4873,7 @@
                 </tr>
               </table>
               
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event after the <code>namespaceURI</code> and/or the <code>nodeName</code> of a <code>Attr</code> node have been modified (e.g., the attribute was renamed using <code>Document.renameNode()</code>). The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event shall be the <code>Element</code> node whose <code>Attr</code> has been renamed.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> must dispatch this event after the <code>namespaceURI</code> and/or the <code>nodeName</code> of a <code>Attr</code> node have been modified (e.g., the attribute was renamed using <code>Document.renameNode()</code>). The <a class="def" href="#glossary-proximal-event-target">proximal event target</a> of this event must be the <code>Element</code> node whose <code>Attr</code> has been renamed.</p>
               <p class="warning" id="_48"><strong>Warning!</strong> the <a class="eventtype" href="#event-type-DOMAttributeNameChanged"><code>DOMAttributeNameChanged</code></a> event type is defined in this specification for reference and completeness, but this specification <a class="def" href="#glossary-deprecated">deprecates</a> the use of this event type.</p>
             </dd>
           </dl>
@@ -5180,7 +5184,7 @@
           <p>NOTE: Some <a class="def" href="#glossary-ime">input method editors</a> (such as on the MacOS operating system) may set an <a class="def" href="#glossary-empty-string">empty string</a> to the composition data attribute before canceling a composition.</p>
           <h5><a id="keys-IME_keys" href="#keys-IME_keys">6.2.4.1 Input Method Editor mode keys</a></h5>
 
-          <p>Some keys on certain devices are intended to activate <a class="def" href="#glossary-ime">input method editor</a> functionality, or to change the mode of an active <a class="def" href="#glossary-ime">input method editor</a>.  Custom keys for this purpose may be defined for different devices or language modes; the keys defined in this specification for this purpose are: <code>Alphanumeric</code>, <code>CodeInput</code>, <code>FinalMode</code>, <code>HangulMode</code>, <code>HanjaMode</code>, <code>Hiragana</code>, <code>JapaneseHiragana</code>, <code>JapaneseKatakana</code>, <code>JapaneseRomaji</code>, <code>JunjaMode</code>, <code>KanaMode</code>, <code>KanjiMode</code>, <code>Katakana</code>, and <code>RomanCharacters</code>.  When one of these keys is pressed, and no <a class="def" href="#glossary-ime">IME</a> is currently active, the appropriate <a class="def" href="#glossary-ime">IME</a>, shall be activated in the mode indicated by the key (if available); if an <a class="def" href="#glossary-ime">IME</a> is already active when the key is pressed, the active <a class="def" href="#glossary-ime">IME</a> may change to the indicated mode, or a different <a class="def" href="#glossary-ime">IME</a> may be launched, or the key may be ignored, on a device- and application-specific basis.</p>
+          <p>Some keys on certain devices are intended to activate <a class="def" href="#glossary-ime">input method editor</a> functionality, or to change the mode of an active <a class="def" href="#glossary-ime">input method editor</a>.  Custom keys for this purpose may be defined for different devices or language modes; the keys defined in this specification for this purpose are: <code>Alphanumeric</code>, <code>CodeInput</code>, <code>FinalMode</code>, <code>HangulMode</code>, <code>HanjaMode</code>, <code>Hiragana</code>, <code>JapaneseHiragana</code>, <code>JapaneseKatakana</code>, <code>JapaneseRomaji</code>, <code>JunjaMode</code>, <code>KanaMode</code>, <code>KanjiMode</code>, <code>Katakana</code>, and <code>RomanCharacters</code>.  When one of these keys is pressed, and no <a class="def" href="#glossary-ime">IME</a> is currently active, the appropriate <a class="def" href="#glossary-ime">IME</a>, must be activated in the mode indicated by the key (if available); if an <a class="def" href="#glossary-ime">IME</a> is already active when the key is pressed, the active <a class="def" href="#glossary-ime">IME</a> may change to the indicated mode, or a different <a class="def" href="#glossary-ime">IME</a> may be launched, or the key may be ignored, on a device- and application-specific basis.</p>
           <p>This specification also defines other keys which are intended for operation specifically with <a class="def" href="#glossary-ime">input method editors</a>: <code>Accept</code>, <code>AllCandidates</code>, <code>Cancel</code>, <code>Convert</code>, <code>Compose</code>, <code>FullWidth</code>, <code>HalfWidth</code>, <code>NextCandidate</code>, <code>Nonconvert</code>, and <code>PreviousCandidate</code>.  The functions of these keys are not defined in this specification; refer to other resources for details on <a class="def" href="#glossary-ime">input method editor</a> functionality.</p>
           <p>Note that keys with <a class="def" href="#glossary-ime">input method editor</a> functions are note restricted to that purpose, and may have other device- or implementation-specific purposes, as well.</p>
         </div>
@@ -5228,7 +5232,7 @@
             <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'q'</code> (<code class="value">U+0071</code>, Latin Small Letter Q key), no <code class="attribute-name"><a href="#events-MouseEvent-shiftKey">shiftKey</a></code></li>
             <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'Shift'</code></li>
           </ol> -->
-          <p>If the key is part of a sequence of several keystrokes, whether it is a <a class="def" href="#glossary-dead-key">dead key</a> or it is contributing to an Input Method Editor sequence, the keystroke shall be ignored (not taken into account) only if the <a class="def" href="#glossary-default-action">default action</a> is canceled on the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event. Canceling a <a class="def" href="#glossary-dead-key">dead key</a> on a <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> event has no effect on <a class="eventtype" href="#event-type-textinput"><code>textinput</code></a> events. The following example uses the keystrokes <code class="value">U+0302</code> (Combining Circumflex Accent key) and the key marked <code class="value">'e'</code> (<code class="value">U+0065</code>, Latin Small Letter E key) (on a PC/AT french keyboard using a french mapping and without any modifier activated):</p>
+          <p>If the key is part of a sequence of several keystrokes, whether it is a <a class="def" href="#glossary-dead-key">dead key</a> or it is contributing to an Input Method Editor sequence, the keystroke must be ignored (not taken into account) only if the <a class="def" href="#glossary-default-action">default action</a> is canceled on the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event. Canceling a <a class="def" href="#glossary-dead-key">dead key</a> on a <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> event has no effect on <a class="eventtype" href="#event-type-textinput"><code>textinput</code></a> events. The following example uses the keystrokes <code class="value">U+0302</code> (Combining Circumflex Accent key) and the key marked <code class="value">'e'</code> (<code class="value">U+0065</code>, Latin Small Letter E key) (on a PC/AT french keyboard using a french mapping and without any modifier activated):</p>
           LATIN SMALL LETTER E WITH ACUTE' (U+00E9)
           <div class="example" id="example-default_action_cancel">
             <p><strong>Example:</strong></p>
@@ -5292,8 +5296,8 @@
             <p><strong>Examples:</strong></p>
             <ul>
               <li>On a PC/AT US keyboard with a right-handed single-hand Dvorak <a class="def" href="#glossary-key-mapping">key mapping</a>, the key labeled <code class="value">'Q'</code> maps to the key values <code class="value">'5'</code> (unmodified) and <code class="value">'%'</code> (shifted).  The primary function of this key is to generate the character <code class="value">'5'</code> (<code class="value">U+0035</code>).  Since this character is a character (in Unicode general category <abbr title="Number, Decimal Digit">Nd</abbr>), the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> and <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute values for the unmodified key will be <code class="value">'5'</code>.</li>
-              <li>On a French PC keyboard with a standard French mapping, the primary function of the <code class="value">'^'</code> key is as a <a class="def" href="#glossary-dead-key">dead key</a> for the circumflex diacritical mark.  This corresponds to the combining Unicode character <code class="value">U+0302</code>.  Since this character is in general category <abbr title="Mark, Nonspacing">Mn</abbr>, the key value shall be <code class="value">U+0302</code>.</li>
-              <li>On a Korean PC keyboard with a standard Korean mapping, the primary function of the <code class="value">'Ha/En'</code> key is to switch between Hangul and English input.  The predefined key value list has an appropriate entry for this key, <code class="value">'HangulMode'</code>, so this shall be the key value.</li>
+              <li>On a French PC keyboard with a standard French mapping, the primary function of the <code class="value">'^'</code> key is as a <a class="def" href="#glossary-dead-key">dead key</a> for the circumflex diacritical mark.  This corresponds to the combining Unicode character <code class="value">U+0302</code>.  Since this character is in general category <abbr title="Mark, Nonspacing">Mn</abbr>, the key value must be <code class="value">U+0302</code>.</li>
+              <li>On a Korean PC keyboard with a standard Korean mapping, the primary function of the <code class="value">'Ha/En'</code> key is to switch between Hangul and English input.  The predefined key value list has an appropriate entry for this key, <code class="value">'HangulMode'</code>, so this must be the key value.</li>
               <li>On some models of mobile devices, the primary function of the key with a picture of a calendar on it is to launch the calendaring program. Since there is no Unicode character that corresponds to this function, and there is no appropriate entry in the predefined key value list, a new value may be devised, such as <code class="value">'Calendar'</code>.</li>
             </ul>
           </div>
@@ -5352,545 +5356,568 @@
 
               <tr>
                 <td><a id="key-Accept"><code class="value keyname">'Accept'</code></a></td>
-                <td> - </td>
-                <td>The Accept (Commit, OK) key.</th>
-                <td class="category"> </td>
-              </tr>
-              <tr>
-                <td><a id="key-Add"><code class="value keyname">'Add'</code></a></td>
-                <td> - </td>
-                <td>The Add key.</th>
+                <td> </td>
+                <td>The Accept (Commit, OK) key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Again"><code class="value keyname">'Again'</code></a></td>
-                <td> - </td>
-                <td>The Again key.</th>
+                <td> </td>
+                <td>The Again key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Apps"><code class="value keyname">'Apps'</code></a></td>
-                <td> - </td>
-                <td>The Application key.</th>
+                <td> </td>
+                <td>The Application key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Attn"><code class="value keyname">'Attn'</code></a></td>
-                <td> - </td>
-                <td>The ATTN key.</th>
+                <td> </td>
+                <td>The Attention (Attn) key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-CodeInput"><code class="value keyname">'CodeInput'</code></a></td>
-                <td> - </td>
-                <td>The Code Input key.</th>
+                <td> </td>
+                <td>The Code Input key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Crsel"><code class="value keyname">'Crsel'</code></a></td>
-                <td> - </td>
-                <td>The Crsel key.</th>
-                <td class="category"> </td>
-              </tr>
-              <tr>
-                <td><a id="key-Decimal"><code class="value keyname">'Decimal'</code></a></td>
-                <td> - </td>
-                <td>The Decimal key.</th>
-                <td class="category"> </td>
-              </tr>
-              <tr>
-                <td><a id="key-Divide"><code class="value keyname">'Divide'</code></a></td>
-                <td> - </td>
-                <td>The Divide key.</th>
+                <td> </td>
+                <td>The Cursor Select (Crsel) key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Enter"><code class="value keyname">'Enter'</code></a></td>
-                <td> - </td>
+                <td> </td>
                 <td>The Enter key.
-                 <span class="note" id="_58"><strong>Note:</strong> This key value must also be used for the <code>Return</code> (Macintosh numpad) key.</span></th>
+                 <span class="note" id="_58"><strong>Note:</strong> This key value also must be used for the <code>Return</code> (Macintosh numpad) key.</span></th>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-EraseEof"><code class="value keyname">'EraseEof'</code></a></td>
-                <td> - </td>
-                <td>The Erase EOF key.</th>
+                <td> </td>
+                <td>The Erase to End of Field key.  This key deletes all characters from the current cursor position to the end of the current field.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Execute"><code class="value keyname">'Execute'</code></a></td>
-                <td> - </td>
-                <td>The Execute key.</th>
+                <td> </td>
+                <td>The Execute key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
-                <td><a id="key-Exsel"><code class="value keyname">'Exsel'</code></a></td>
-                <td> - </td>
-                <td>The Exsel key.</th>
+                <td><a id="key-Exsel"><code class="value keyname">'ExSel'</code></a></td>
+                <td> </td>
+                <td>The Extend Selection (ExSel) key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F1"><code class="value keyname">'F1'</code></a></td>
-                <td> - </td>
-                <td>The F1 key.</th>
+                <td> </td>
+                <td>The F1 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F2"><code class="value keyname">'F2'</code></a></td>
-                <td> - </td>
-                <td>The F2 key.</th>
+                <td> </td>
+                <td>The F2 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F3"><code class="value keyname">'F3'</code></a></td>
-                <td> - </td>
-                <td>The F3 key.</th>
+                <td> </td>
+                <td>The F3 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F4"><code class="value keyname">'F4'</code></a></td>
-                <td> - </td>
-                <td>The F4 key.</th>
+                <td> </td>
+                <td>The F4 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F5"><code class="value keyname">'F5'</code></a></td>
-                <td> - </td>
-                <td>The F5 key.</th>
+                <td> </td>
+                <td>The F5 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F6"><code class="value keyname">'F6'</code></a></td>
-                <td> - </td>
-                <td>The F6 key.</th>
+                <td> </td>
+                <td>The F6 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F7"><code class="value keyname">'F7'</code></a></td>
-                <td> - </td>
-                <td>The F7 key.</th>
+                <td> </td>
+                <td>The F7 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F8"><code class="value keyname">'F8'</code></a></td>
-                <td> - </td>
-                <td>The F8 key.</th>
+                <td> </td>
+                <td>The F8 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F9"><code class="value keyname">'F9'</code></a></td>
-                <td> - </td>
-                <td>The F9 key.</th>
+                <td> </td>
+                <td>The F9 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F10"><code class="value keyname">'F10'</code></a></td>
-                <td> - </td>
-                <td>The F10 key.</th>
+                <td> </td>
+                <td>The F10 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F11"><code class="value keyname">'F11'</code></a></td>
-                <td> - </td>
-                <td>The F11 key.</th>
+                <td> </td>
+                <td>The F11 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F12"><code class="value keyname">'F12'</code></a></td>
-                <td> - </td>
-                <td>The F12 key.</th>
+                <td> </td>
+                <td>The F12 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F13"><code class="value keyname">'F13'</code></a></td>
-                <td> - </td>
-                <td>The F13 key.</th>
+                <td> </td>
+                <td>The F13 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F14"><code class="value keyname">'F14'</code></a></td>
-                <td> - </td>
-                <td>The F14 key.</th>
+                <td> </td>
+                <td>The F14 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F15"><code class="value keyname">'F15'</code></a></td>
-                <td> - </td>
-                <td>The F15 key.</th>
+                <td> </td>
+                <td>The F15 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F16"><code class="value keyname">'F16'</code></a></td>
-                <td> - </td>
-                <td>The F16 key.</th>
+                <td> </td>
+                <td>The F16 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F17"><code class="value keyname">'F17'</code></a></td>
-                <td> - </td>
-                <td>The F17 key.</th>
+                <td> </td>
+                <td>The F17 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F18"><code class="value keyname">'F18'</code></a></td>
-                <td> - </td>
-                <td>The F18 key.</th>
+                <td> </td>
+                <td>The F18 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F19"><code class="value keyname">'F19'</code></a></td>
-                <td> - </td>
-                <td>The F19 key.</th>
+                <td> </td>
+                <td>The F19 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F20"><code class="value keyname">'F20'</code></a></td>
-                <td> - </td>
-                <td>The F20 key.</th>
+                <td> </td>
+                <td>The F20 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F21"><code class="value keyname">'F21'</code></a></td>
-                <td> - </td>
-                <td>The F21 key.</th>
+                <td> </td>
+                <td>The F21 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F22"><code class="value keyname">'F22'</code></a></td>
-                <td> - </td>
-                <td>The F22 key.</th>
+                <td> </td>
+                <td>The F22 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F23"><code class="value keyname">'F23'</code></a></td>
-                <td> - </td>
-                <td>The F23 key.</th>
+                <td> </td>
+                <td>The F23 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-F24"><code class="value keyname">'F24'</code></a></td>
-                <td> - </td>
-                <td>The F24 key.</th>
+                <td> </td>
+                <td>The F24 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Find"><code class="value keyname">'Find'</code></a></td>
-                <td> - </td>
-                <td>The Find key.</th>
+                <td> </td>
+                <td>The Find key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Help"><code class="value keyname">'Help'</code></a></td>
-                <td> - </td>
-                <td>The Help key.</th>
+                <td> </td>
+                <td>The Help key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-LaunchApplication1"><code class="value keyname">'LaunchApplication1'</code></a></td>
-                <td> - </td>
-                <td>The Start Application One key.</th>
+                <td> </td>
+                <td>The Start Application One key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-LaunchApplication2"><code class="value keyname">'LaunchApplication2'</code></a></td>
-                <td> - </td>
-                <td>The Start Application Two key.</th>
+                <td> </td>
+                <td>The Start Application Two key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-LaunchMail"><code class="value keyname">'LaunchMail'</code></a></td>
-                <td> - </td>
-                <td>The Start Mail key.</th>
+                <td> </td>
+                <td>The Start Mail key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Menu"><code class="value keyname">'Menu'</code></a></td>
-                <td> - </td>
-                <td>The Menu key.</th>
+                <td> </td>
+                <td>The Menu key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Power"><code class="value keyname">'Power'</code></a></td>
-                <td> - </td>
+                <td> </td>
                 <td>The Power key.
                  <span class="note" id="_61"><strong>Note:</strong> Some devices may not expose this key to the operating environment.</span></th>
                 <td class="category">Device</td>
               </tr>
               <tr>
                 <td><a id="key-PrintScreen"><code class="value keyname">'PrintScreen'</code></a></td>
-                <td> - </td>
-                <td>The Print Screen (PrintScrn, SnapShot) key.</th>
+                <td> </td>
+                <td>The Print Screen (PrintScrn, SnapShot) key.</td>
                 <td class="category">Device</td>
               </tr>
               <tr>
                 <td><a id="key-Props"><code class="value keyname">'Props'</code></a></td>
-                <td> - </td>
-                <td>The Props key.</th>
+                <td> </td>
+                <td>The Props key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Scroll"><code class="value keyname">'Scroll'</code></a></td>
-                <td> - </td>
-                <td>The Scroll Lock key.</th>
+                <td> </td>
+                <td>The Scroll Lock key.</td>
                 <td class="category">UI</td>
               </tr>
               <tr>
                 <td><a id="key-Separator"><code class="value keyname">'Separator'</code></a></td>
-                <td> - </td>
-                <td>The Separator key.</th>
+                <td> </td>
+                <td>The Separator key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Soft1"><code class="value keyname">'Soft1'</code></a></td>
-                <td> - </td>
-                <td>The Soft1 key.</th>
+                <td> </td>
+                <td>The Soft1 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Soft2"><code class="value keyname">'Soft2'</code></a></td>
-                <td> - </td>
-                <td>The Soft2 key.</th>
+                <td> </td>
+                <td>The Soft2 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Soft3"><code class="value keyname">'Soft3'</code></a></td>
-                <td> - </td>
-                <td>The Soft3 key.</th>
+                <td> </td>
+                <td>The Soft3 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Soft4"><code class="value keyname">'Soft4'</code></a></td>
-                <td> - </td>
-                <td>The Soft4 key.</th>
+                <td> </td>
+                <td>The Soft4 key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Zoom"><code class="value keyname">'Zoom'</code></a></td>
-                <td> - </td>
-                <td>The Zoom key.</th>
+                <td> </td>
+                <td>The Zoom key.</td>
                 <td class="category">UI</td>
               </tr>
               <tr>
                 <td><a id="key-Cancel"><code class="value keyname">'Cancel'</code></a></td>
                 <td><a id="key-U-0018"><code class="value charval">'\u0018'</code></a></td>
-                <td>The Cancel key.</th>
+                <td>The Cancel key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Esc"><code class="value keyname">'Esc'</code></a></td>
                 <td><a id="key-U-001B"><code class="value charval">'\u001B'</code></a></td>
-                <td>The Escape (Esc) key.</th>
+                <td>The Escape (Esc) key.</td>
                 <td class="category"> </td>
               </tr>
               <tr>
                 <td><a id="key-Spacebar"><code class="value keyname">'Spacebar'</code></a></td>
                 <td><a id="key-U-0020"><code class="value charval">'\u0020'</code></a></td>
-                <td>The Space (Spacebar) key: <code class="value charrep">&nbsp;</code>.</th>
+                <td>The Space (Spacebar) key (<code class="value charrep">'&nbsp;'</code>).</th>
                 <td class="category">Character</td>
               </tr>
 
               <tr>
+                <td><a id="key-Add"><code class="value keyname">'Add'</code></a></td>
+                <td><a id="key-U-002B"><code class="value charval">'\u002B'</code></a></td>
+                <td>The Add key, or plus sign (<code class="value charrep">'+'</code>).</td>
+                <td class="category">Character / Math</td>
+              </tr>
+              <tr>
+                <td><a id="key-Subtract"><code class="value keyname">'Subtract'</code></a></td>
+                <td><a id="key-U-2212"><code class="value charval">'\u2212'</code></a></td>
+                <td>The Subtract key, or minus sign (<code class="value charrep">'−'</code>).</td>
+                <td class="category">Character / Math</td>
+              </tr>
+              <tr>
+                <td><a id="key-Multiply"><code class="value keyname">'Multiply'</code></a></td>
+                <td><a id="key-U-002A"><code class="value charval">'\u002A'</code></a></td>
+                <td>The Multiply key, or multiplication sign (<code class="value charrep">'*'</code>).
+                  <span class="note" id="note-Multiply"><strong>Note:</strong> This key value may be represented by different characters depending on context, including <code id="key-U-002A" class="value charval">'\u002A' (ASTERISK, '*')</code> or <code id="key-U-00D7" class="value charval">'\u00D7' (MULTIPLICATION SIGN, '×')</code>.</span>
+                </td>
+                <td class="category">Character / Math</td>
+              </tr>
+              <tr>
+                <td><a id="key-Divide"><code class="value keyname">'Divide'</code></a></td>
+                <td><a id="key-U-00F7"><code class="value charval">'\u00F7'</code></a></td>
+                <td>The Divide key, or division sign (<code class="value charrep">'÷'</code>).</td>
+                <td class="category">Character / Math</td>
+              </tr>
+              <tr>
+                <td><a id="key-Equals"><code class="value keyname">'Equals'</code></a></td>
+                <td><a id="key-U-003D"><code class="value charval">'\u003D'</code></a></td>
+                <td>The Equals key, or equals sign (<code class="value charrep">'='</code>).</td>
+                <td class="category">Character / Math</td>
+              </tr>
+              <tr>
+                <td><a id="key-Decimal"><code class="value keyname">'Decimal'</code></a></td>
+                <td><a id="key-U-2396"><code class="value charval">'\u2396'</code></a></td>
+                <td>The Decimal key, or decimal separator key symbol (<code class="value charrep">'.'</code>).  
+                  <span class="note" id="note-decimal"><strong>Note:</strong> This key value may be represented by different characters due to localization, such as <code id="key-U-002E" class="value charval">'\u002E' (FULL STOP, '.')</code> or <code id="key-U-00B7" class="value charval">'\u00B7' (MIDDLE DOT, '·')</code>.</span>
+                </td>
+                <td class="category">Character / Math</td>
+              </tr>
+
+              <tr>
                 <td><a id="key-BrightnessDown"><code class="value keyname">'BrightnessDown'</code></a></td>
-                <td> - </td>
+                <td> </td>
                 <td>The Brightness Down key.  Typically controls the display brightness.</th>
                 <td class="category">Device</td>
               </tr>
               <tr>
                 <td><a id="key-BrightnessUp"><code class="value keyname">'BrightnessUp'</code></a></td>
-                <td> - </td>
+                <td> </td>
                 <td>The Brightness Up key.  Typically controls the display brightness.</th>
                 <td class="category">Device</td>
               </tr>
               <tr>
                 <td><a id="key-Camera"><code class="value keyname">'Camera'</code></a></td>
-                <td> - </td>
-                <td>The Camera key.</th>
+                <td> </td>
+                <td>The Camera key.</td>
                 <td class="category">Device</td>
               </tr>
               <tr>
                 <td><a id="key-Eject"><code class="value keyname">'Eject'</code></a></td>
-                <td> - </td>
-                <td>The Eject key.</th>
+                <td> </td>
+                <td>The Eject key.</td>
                 <td class="category">Device</td>
               </tr>
 
               <tr>
                 <td><a id="key-BrowserBack"><code class="value keyname">'BrowserBack'</code></a></td>
-                <td> - </td>
-                <td>The Browser Back key.</th>
+                <td> </td>
+                <td>The Browser Back key.</td>
                 <td class="category">Browser</td>
               </tr>
               <tr>
                 <td><a id="key-BrowserFavorites"><code class="value keyname">'BrowserFavorites'</code></a></td>
-                <td> - </td>
-                <td>The Browser Favorites key.</th>
+                <td> </td>
+                <td>The Browser Favorites key.</td>
                 <td class="category">Browser</td>
               </tr>
               <tr>
                 <td><a id="key-BrowserForward"><code class="value keyname">'BrowserForward'</code></a></td>
-                <td> - </td>
-                <td>The Browser Forward key.</th>
+                <td> </td>
+                <td>The Browser Forward key.</td>
                 <td class="category">Browser</td>
               </tr>
               <tr>
                 <td><a id="key-BrowserHome"><code class="value keyname">'BrowserHome'</code></a></td>
-                <td> - </td>
-                <td>The Browser Home key.</th>
+                <td> </td>
+                <td>The Browser Home key.</td>
                 <td class="category">Browser</td>
               </tr>
               <tr>
                 <td><a id="key-BrowserRefresh"><code class="value keyname">'BrowserRefresh'</code></a></td>
-                <td> - </td>
-                <td>The Browser Refresh key.</th>
+                <td> </td>
+                <td>The Browser Refresh key.</td>
                 <td class="category">Browser</td>
               </tr>
               <tr>
                 <td><a id="key-BrowserSearch"><code class="value keyname">'BrowserSearch'</code></a></td>
-                <td> - </td>
-                <td>The Browser Search key.</th>
+                <td> </td>
+                <td>The Browser Search key.</td>
                 <td class="category">Browser</td>
               </tr>
               <tr>
                 <td><a id="key-BrowserStop"><code class="value keyname">'BrowserStop'</code></a></td>
-                <td> - </td>
-                <td>The Browser Stop key.</th>
+                <td> </td>
+                <td>The Browser Stop key.</td>
                 <td class="category">Browser</td>
               </tr>
 
 
               <tr>
                 <td><a id="key-Home"><code class="value keyname">'Home'</code></a></td>
-                <td> - </td>
-                <td>The Home key.</th>
+                <td> </td>
+                <td>The Home key.</td>
                 <td class="category">Edit / Navigation</td>
               </tr>
               <tr>
                 <td><a id="key-Left"><code class="value keyname">'Left'</code></a></td>
-                <td> - </td>
-                <td>The Left Arrow key.</th>
+                <td> </td>
+                <td>The Left Arrow key.</td>
                 <td class="category">Navigation</td>
               </tr>
               <tr>
                 <td><a id="key-PageDown"><code class="value keyname">'PageDown'</code></a></td>
-                <td> - </td>
-                <td>The Page Down (Next) key.</th>
+                <td> </td>
+                <td>The Page Down (Next) key.</td>
                 <td class="category">Navigation</td>
               </tr>
               <tr>
                 <td><a id="key-PageUp"><code class="value keyname">'PageUp'</code></a></td>
-                <td> - </td>
-                <td>The Page Up key.</th>
+                <td> </td>
+                <td>The Page Up key.</td>
                 <td class="category">Navigation</td>
               </tr>
               <tr>
                 <td><a id="key-Right"><code class="value keyname">'Right'</code></a></td>
-                <td> - </td>
-                <td>The Right Arrow key.</th>
+                <td> </td>
+                <td>The Right Arrow key.</td>
                 <td class="category">Navigation</td>
               </tr>
               <tr>
                 <td><a id="key-Up"><code class="value keyname">'Up'</code></a></td>
-                <td> - </td>
-                <td>The Up Arrow key.</th>
+                <td> </td>
+                <td>The Up Arrow key.</td>
                 <td class="category">Navigation</td>
               </tr>
               <tr>
                 <td><a id="key-UpLeft"><code class="value keyname">'UpLeft'</code></a></td>
-                <td> - </td>
-                <td>The diagonal Up-Left Arrow key.</th>
+                <td> </td>
+                <td>The diagonal Up-Left Arrow key.</td>
                 <td class="category">Navigation</td>
               </tr>
               <tr>
                 <td><a id="key-UpRight"><code class="value keyname">'UpRight'</code></a></td>
-                <td> - </td>
-                <td>The diagonal Up-Right Arrow key.</th>
+                <td> </td>
+                <td>The diagonal Up-Right Arrow key.</td>
                 <td class="category">Navigation</td>
               </tr>
               <tr>
                 <td><a id="key-Down"><code class="value keyname">'Down'</code></a></td>
-                <td> - </td>
-                <td>The Down Arrow key.</th>
+                <td> </td>
+                <td>The Down Arrow key.</td>
                 <td class="category">Navigation</td>
               </tr>
               <tr>
                 <td><a id="key-DownLeft"><code class="value keyname">'DownLeft'</code></a></td>
-                <td> - </td>
-                <td>The diagonal Down-Left Arrow key.</th>
+                <td> </td>
+                <td>The diagonal Down-Left Arrow key.</td>
                 <td class="category">Navigation</td>
               </tr>
               <tr>
                 <td><a id="key-DownRight"><code class="value keyname">'DownRight'</code></a></td>
-                <td> - </td>
-                <td>The diagonal Down-Right Arrow key.</th>
+                <td> </td>
+                <td>The diagonal Down-Right Arrow key.</td>
                 <td class="category">Navigation</td>
               </tr>
 
 
               <tr>
                 <td><a id="key-End"><code class="value keyname">'End'</code></a></td>
-                <td> - </td>
-                <td>The End key.</th>
+                <td> </td>
+                <td>The End key.</td>
                 <td class="category">Edit / Navigation</td>
               </tr>
               <tr>
                 <td><a id="key-Select"><code class="value keyname">'Select'</code></a></td>
-                <td> - </td>
-                <td>The Select key.</th>
+                <td> </td>
+                <td>The Select key.</td>
                 <td class="category">Edit / Navigation</td>
               </tr>
               <tr>
                 <td><a id="key-Clear"><code class="value keyname">'Clear'</code></a></td>
-                <td> - </td>
-                <td>The Clear key.</th>
+                <td> </td>
+                <td>The Clear key.</td>
                 <td class="category">Edit</td>
               </tr>
               <tr>
                 <td><a id="key-Copy"><code class="value keyname">'Copy'</code></a></td>
-                <td> - </td>
-                <td>The Copy key.</th>
+                <td> </td>
+                <td>The Copy key.</td>
                 <td class="category">Edit</td>
               </tr>
               <tr>
                 <td><a id="key-Cut"><code class="value keyname">'Cut'</code></a></td>
-                <td> - </td>
-                <td>The Cut key.</th>
+                <td> </td>
+                <td>The Cut key.</td>
                 <td class="category">Edit</td>
               </tr>
               <tr>
                 <td><a id="key-Insert"><code class="value keyname">'Insert'</code></a></td>
-                <td> - </td>
-                <td>The Insert (Ins) key.</th>
+                <td> </td>
+                <td>The Insert (Ins) key.</td>
                 <td class="category">Edit</td>
               </tr>
               <tr>
                 <td><a id="key-Paste"><code class="value keyname">'Paste'</code></a></td>
-                <td> - </td>
-                <td>The Paste key.</th>
+                <td> </td>
+                <td>The Paste key.</td>
                 <td class="category">Edit</td>
               </tr>
               <tr>
                 <td><a id="key-Del"><code class="value keyname">'Del'</code></a></td>
                 <td><a id="key-U-007F"><code class="value charval">'\u007F'</code></a></td>
-                <td>The Delete (Del) Key. <span class="note" id="_63"><strong>Note:</strong> This key value must also be used for the key labeled <code class="value">'delete'</code> MacOS keyboards when modified by the <code class="value">'Fn'</code> key.</th>
+                <td>The Delete (Del) Key. <span class="note" id="_63"><strong>Note:</strong> This key value also must be used for the key labeled <code class="value">'delete'</code> MacOS keyboards when modified by the <code class="value">'Fn'</code> key.</span></td>
                 <td class="category">Edit</td>
               </tr>
               <tr>
                 <td><a id="key-Backspace"><code class="value keyname">'Backspace'</code></a></td>
                 <td><a id="key-U-0008"><code class="value charval">'\u0008'</code></a></td>
                 <td>The Backspace (Back) key.
-                 <span class="note" id="_62"><strong>Note:</strong> This key value shall be also used for the key labeled <code class="value">'delete'</code> MacOS keyboards when not modified by the <code class="value">'Fn'</code> key.</span></th>
+                 <span class="note" id="_62"><strong>Note:</strong> This key value also must be used for the key labeled <code class="value">'delete'</code> MacOS keyboards when not modified by the <code class="value">'Fn'</code> key.</span></th>
                 <td class="category">Edit</td>
               </tr>
               <tr>
                 <td><a id="key-Tab"><code class="value keyname">'Tab'</code></a></td>
                 <td><a id="key-U-0009"><code class="value charval">'\u0009'</code></a></td>
-                <td>The Horizontal Tabulation (Tab) key.</th>
+                <td>The Horizontal Tabulation (Tab) key.</td>
                 <td class="category">Edit / Navigation</td>
               </tr>
               <tr>
                 <td><a id="key-Undo"><code class="value keyname">'Undo'</code></a></td>
-                <td> - </td>
-                <td>The Undo key.</th>
+                <td> </td>
+                <td>The Undo key.</td>
                 <td class="category">Edit</td>
               </tr>
 
@@ -5898,381 +5925,382 @@
               <tr>
                 <td><a id="key-DeadGrave"><code class="value keyname">'DeadGrave'</code></a></td>
                 <td><a id="key-U-0300"><code class="value charval">'\u0300'</code></a></td>
-                <td>The Combining Grave Accent (Greek Varia, Dead Grave) key.</th>
+                <td>The Combining Grave Accent (Greek Varia, Dead Grave) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadEacute"><code class="value keyname">'DeadEacute'</code></a></td>
                 <td><a id="key-U-0301"><code class="value charval">'\u0301'</code></a></td>
-                <td>The Combining Acute Accent (Stress Mark, Greek Oxia, Tonos, Dead Eacute) key.</th>
+                <td>The Combining Acute Accent (Stress Mark, Greek Oxia, Tonos, Dead Eacute) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadCircumflex"><code class="value keyname">'DeadCircumflex'</code></a></td>
                 <td><a id="key-U-0302"><code class="value charval">'\u0302'</code></a></td>
-                <td>The Combining Circumflex Accent (Hat, Dead Circumflex) key.</th>
+                <td>The Combining Circumflex Accent (Hat, Dead Circumflex) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadTilde"><code class="value keyname">'DeadTilde'</code></a></td>
                 <td><a id="key-U-0303"><code class="value charval">'\u0303'</code></a></td>
-                <td>The Combining Tilde (Dead Tilde) key.</th>
+                <td>The Combining Tilde (Dead Tilde) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadMacron"><code class="value keyname">'DeadMacron'</code></a></td>
                 <td><a id="key-U-0304"><code class="value charval">'\u0304'</code></a></td>
-                <td>The Combining Macron (Long, Dead Macron) key.</th>
+                <td>The Combining Macron (Long, Dead Macron) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadBreve"><code class="value keyname">'DeadBreve'</code></a></td>
                 <td><a id="key-U-0306"><code class="value charval">'\u0306'</code></a></td>
-                <td>The Combining Breve (Short, Dead Breve) key.</th>
+                <td>The Combining Breve (Short, Dead Breve) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadAboveDot"><code class="value keyname">'DeadAboveDot'</code></a></td>
                 <td><a id="key-U-0307"><code class="value charval">'\u0307'</code></a></td>
-                <td>The Combining Dot Above (Derivative, Dead Above Dot) key.</th>
+                <td>The Combining Dot Above (Derivative, Dead Above Dot) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadUmlaut"><code class="value keyname">'DeadUmlaut'</code></a></td>
                 <td><a id="key-U-0308"><code class="value charval">'\u0308'</code></a></td>
-                <td>The Combining Diaeresis (Double Dot Abode, Umlaut, Greek Dialytika, Double Derivative, Dead Diaeresis) key.</th>
+                <td>The Combining Diaeresis (Double Dot Abode, Umlaut, Greek Dialytika, Double Derivative, Dead Diaeresis) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadAboveRing"><code class="value keyname">'DeadAboveRing'</code></a></td>
                 <td><a id="key-U-030A"><code class="value charval">'\u030A'</code></a></td>
-                <td>The Combining Ring Above (Dead Above Ring) key.</th>
+                <td>The Combining Ring Above (Dead Above Ring) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadDoubleacute"><code class="value keyname">'DeadDoubleacute'</code></a></td>
                 <td><a id="key-U-030B"><code class="value charval">'\u030B'</code></a></td>
-                <td>The Combining Double Acute Accent (Dead Doubleacute) key.</th>
+                <td>The Combining Double Acute Accent (Dead Doubleacute) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadCaron"><code class="value keyname">'DeadCaron'</code></a></td>
                 <td><a id="key-U-030C"><code class="value charval">'\u030C'</code></a></td>
-                <td>The Combining Caron (Hacek, V Above, Dead Caron) key.</th>
+                <td>The Combining Caron (Hacek, V Above, Dead Caron) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadCedilla"><code class="value keyname">'DeadCedilla'</code></a></td>
                 <td><a id="key-U-0327"><code class="value charval">'\u0327'</code></a></td>
-                <td>The Combining Cedilla (Dead Cedilla) key.</th>
+                <td>The Combining Cedilla (Dead Cedilla) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadOgonek"><code class="value keyname">'DeadOgonek'</code></a></td>
                 <td><a id="key-U-0328"><code class="value charval">'\u0328'</code></a></td>
-                <td>The Combining Ogonek (Nasal Hook, Dead Ogonek) key.</th>
+                <td>The Combining Ogonek (Nasal Hook, Dead Ogonek) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadIota"><code class="value keyname">'DeadIota'</code></a></td>
                 <td><a id="key-U-0345"><code class="value charval">'\u0345'</code></a></td>
-                <td>The Combining Greek Ypogegrammeni (Greek Non-Spacing Iota Below, Iota Subscript, Dead Iota) key.</th>
+                <td>The Combining Greek Ypogegrammeni (Greek Non-Spacing Iota Below, Iota Subscript, Dead Iota) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadVoicedSound"><code class="value keyname">'DeadVoicedSound'</code></a></td>
                 <td><a id="key-U-3099"><code class="value charval">'\u3099'</code></a></td>
-                <td>The Combining Katakana-Hiragana Voiced Sound Mark (Dead Voiced Sound) key.</th>
+                <td>The Combining Katakana-Hiragana Voiced Sound Mark (Dead Voiced Sound) key.</td>
                 <td class="category">Composition</td>
               </tr>
               <tr>
                 <td><a id="key-DeadSemivoicedSound"><code class="value keyname">'DeadSemivoicedSound'</code></a></td>
                 <td><a id="key-U-309A"><code class="value charval">'\u309A'</code></a></td>
-                <td>The Combining Katakana-Hiragana Semi-Voiced Sound Mark (Dead Semivoiced Sound) key.</th>
+                <td>The Combining Katakana-Hiragana Semi-Voiced Sound Mark (Dead Semivoiced Sound) key.</td>
                 <td class="category">Composition</td>
               </tr>
 
               <tr>
                 <td><a id="key-Alphanumeric"><code class="value keyname">'Alphanumeric'</code></a></td>
-                <td> - </td>
-                <td>The Alphanumeric key.</th>
+                <td> </td>
+                <td>The Alphanumeric key.</td>
                 <td class="category">Modifier</td>
               </tr>
               <tr>
                 <td><a id="key-Alt"><code class="value keyname">'Alt'</code></a></td>
-                <td> - </td>
-                <td>The Alt (Menu) key.</th>
+                <td> </td>
+                <td>The Alternative (Alt, Option, Menu) key.
+                  <span class="note" id="note-meta-key"><strong>Note:</strong> This key value also must be used for the Apple <code>'Option'</code> key.</span>
+                </td>
                 <td class="category">Modifier</td>
               </tr>
               <tr>
                 <td><a id="key-AltGraph"><code class="value keyname">'AltGraph'</code></a></td>
-                <td> - </td>
-                <td>The Alt-Graph key.</th>
+                <td> </td>
+                <td>The Alt-Graph key.</td>
                 <td class="category">Modifier</td>
               </tr>
               <tr>
                 <td><a id="key-CapsLock"><code class="value keyname">'CapsLock'</code></a></td>
-                <td> - </td>
-                <td>The Caps Lock (Capital) key.</th>
+                <td> </td>
+                <td>The Caps Lock (Capital) key.</td>
                 <td class="category">Modifier</td>
               </tr>
               <tr>
                 <td><a id="key-Control"><code class="value keyname">'Control'</code></a></td>
-                <td> - </td>
-                <td>The Control (Ctrl) key.</th>
+                <td> </td>
+                <td>The Control (Ctrl) key.</td>
                 <td class="category">Modifier</td>
               </tr>
               <tr>
-                <td><a id="key-Subtract"><code class="value keyname">'Subtract'</code></a></td>
-                <td> - </td>
-                <td>The Subtract key.</th>
-                <td class="category"> </td>
-              </tr>
-              <tr>
                 <td><a id="key-Fn"><code class="value keyname">'Fn'</code></a></td>
-                <td> - </td>
-                <td>The Function switch key.</th>
+                <td> </td>
+                <td>The Function switch (Fn) key.  Activating this key simultaneously with another key changes that key's value to an alternate character or function.</td>
+                <td class="category">Modifier</td>
+              </tr>
+              <tr>
+                <td><a id="key-FnLock"><code class="value keyname">'FnLock'</code></a></td>
+                <td> </td>
+                <td>The Function-Lock (FnLock, F-Lock) key.  Activating this key switches the mode of the keyboard to changes some keys' values to an alternate character or function.</td>
                 <td class="category">Modifier</td>
               </tr>
               <tr>
                 <td><a id="key-Meta"><code class="value keyname">'Meta'</code></a></td>
-                <td> - </td>
+                <td> </td>
                 <td>The Meta key.
-                  <span class="note" id="_59">
-                    <strong>Note:</strong> This key value must also be used for the Apple <code>'Command'</code> key.
-                  </span></th>
+                  <span class="note" id="note-meta-key"><strong>Note:</strong> This key value also must be used for the Apple <code>'Command'</code> key.</span>
+                </th>
                 <td class="category">Modifier</td>
               </tr>
               <tr>
                 <td><a id="key-Process"><code class="value keyname">'Process'</code></a></td>
-                <td> - </td>
-                <td>The Process key.</th>
+                <td> </td>
+                <td>The Process key.</td>
                 <td class="category">Modifier</td>
               </tr>
               <tr>
                 <td><a id="key-NumLock"><code class="value keyname">'NumLock'</code></a></td>
-                <td> - </td>
-                <td>The Number Lock key.</th>
+                <td> </td>
+                <td>The Number Lock key.</td>
                 <td class="category">Modifier</td>
               </tr>
               <tr>
                 <td><a id="key-Shift"><code class="value keyname">'Shift'</code></a></td>
-                <td> - </td>
-                <td>The Shift key.</th>
+                <td> </td>
+                <td>The Shift key.</td>
                 <td class="category">Modifier</td>
               </tr>
               <tr>
                 <td><a id="key-SymbolLock"><code class="value keyname">'SymbolLock'</code></a></td>
-                <td> - </td>
-                <td>The Symbol Lock key.</th>
+                <td> </td>
+                <td>The Symbol Lock key.</td>
                 <td class="category">Modifier</td>
               </tr>
               <tr>
                 <td><a id="key-Win"><code class="value keyname">'Win'</code></a></td>
-                <td> - </td>
-                <td>The Windows Logo key.</th>
+                <td> </td>
+                <td>The Windows Logo key.</td>
                 <td class="category">Modifier</td>
               </tr>
               <tr>
                 <td><a id="key-Compose"><code class="value keyname">'Compose'</code></a></td>
-                <td> - </td>
-                <td>The Compose key.</th>
+                <td> </td>
+                <td>The Compose key, also known as <em>Multi_key</em> on the X Window System.  This key acts in a manner similar to a <a class="def" href="#glossary-dead-key">dead key</a>, triggering a mode where subsequent key presses are combined to produce a different character.</td>
                 <td class="category">Modifier</td>
               </tr>
 
               <tr>
                 <td><a id="key-AllCandidates"><code class="value keyname">'AllCandidates'</code></a></td>
-                <td> - </td>
-                <td>The All Candidates key.</th>
+                <td> </td>
+                <td>The All Candidates key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-NextCandidate"><code class="value keyname">'NextCandidate'</code></a></td>
-                <td> - </td>
-                <td>The Next Candidate function key.</th>
+                <td> </td>
+                <td>The Next Candidate function key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-PreviousCandidate"><code class="value keyname">'PreviousCandidate'</code></a></td>
-                <td> - </td>
-                <td>The Previous Candidate function key.</th>
+                <td> </td>
+                <td>The Previous Candidate function key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-Convert"><code class="value keyname">'Convert'</code></a></td>
-                <td> - </td>
-                <td>The Convert key.</th>
+                <td> </td>
+                <td>The Convert key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-Nonconvert"><code class="value keyname">'Nonconvert'</code></a></td>
-                <td> - </td>
-                <td>The Nonconvert (Don't Convert) key.</th>
+                <td> </td>
+                <td>The Nonconvert (Don't Convert) key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-FinalMode"><code class="value keyname">'FinalMode'</code></a></td>
-                <td> - </td>
+                <td> </td>
                 <td>The Final Mode (Final) key used on some asian keyboards.</th>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-FullWidth"><code class="value keyname">'FullWidth'</code></a></td>
-                <td> - </td>
-                <td>The Full-Width Characters key.</th>
+                <td> </td>
+                <td>The Full-Width Characters key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-HalfWidth"><code class="value keyname">'HalfWidth'</code></a></td>
-                <td> - </td>
-                <td>The Half-Width Characters key.</th>
+                <td> </td>
+                <td>The Half-Width Characters key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-ModeChange"><code class="value keyname">'ModeChange'</code></a></td>
-                <td> - </td>
-                <td>The Mode Change key.</th>
+                <td> </td>
+                <td>The Mode Change key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-RomanCharacters"><code class="value keyname">'RomanCharacters'</code></a></td>
-                <td> - </td>
-                <td>The Roman Characters function key, also known as the <code>'Youngja'</code> or <code>'Young'</code> key.</th>
+                <td> </td>
+                <td>The Roman Characters function key, also known as the <code>'Youngja'</code> or <code>'Young'</code> key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-HangulMode"><code class="value keyname">'HangulMode'</code></a></td>
-                <td> - </td>
-                <td>The Hangul (Korean characters) Mode key.</th>
+                <td> </td>
+                <td>The Hangul (Korean characters) Mode key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-HanjaMode"><code class="value keyname">'HanjaMode'</code></a></td>
-                <td> - </td>
-                <td>The Hanja (Korean characters) Mode key.</th>
+                <td> </td>
+                <td>The Hanja (Korean characters) Mode key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-JunjaMode"><code class="value keyname">'JunjaMode'</code></a></td>
-                <td> - </td>
-                <td>The Junja (Korean characters) Mode key.</th>
+                <td> </td>
+                <td>The Junja (Korean characters) Mode key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-Hiragana"><code class="value keyname">'Hiragana'</code></a></td>
-                <td> - </td>
-                <td>The Hiragana (Japanese Kana characters) key.</th>
+                <td> </td>
+                <td>The Hiragana (Japanese Kana characters) key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-JapaneseHiragana"><code class="value keyname">'JapaneseHiragana'</code></a></td>
-                <td> - </td>
-                <td>The Japanese-Hiragana key.</th>
+                <td> </td>
+                <td>The Japanese-Hiragana key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-JapaneseKatakana"><code class="value keyname">'JapaneseKatakana'</code></a></td>
-                <td> - </td>
-                <td>The Japanese-Katakana key.</th>
+                <td> </td>
+                <td>The Japanese-Katakana key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-JapaneseRomaji"><code class="value keyname">'JapaneseRomaji'</code></a></td>
-                <td> - </td>
-                <td>The Japanese-Romaji key.</th>
+                <td> </td>
+                <td>The Japanese-Romaji key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-KanaMode"><code class="value keyname">'KanaMode'</code></a></td>
-                <td> - </td>
-                <td>The Kana Mode (Kana Lock) key.</th>
+                <td> </td>
+                <td>The Kana Mode (Kana Lock) key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-KanjiMode"><code class="value keyname">'KanjiMode'</code></a></td>
-                <td> - </td>
-                <td>The Kanji (Japanese name for ideographic characters of Chinese origin) Mode key.</th>
+                <td> </td>
+                <td>The Kanji (Japanese name for ideographic characters of Chinese origin) Mode key.</td>
                 <td class="category">IME</td>
               </tr>
               <tr>
                 <td><a id="key-Katakana"><code class="value keyname">'Katakana'</code></a></td>
-                <td> - </td>
-                <td>The Katakana (Japanese Kana characters) key.</th>
+                <td> </td>
+                <td>The Katakana (Japanese Kana characters) key.</td>
                 <td class="category">IME</td>
               </tr>
 
 
               <tr>
                 <td><a id="key-VolumeDown"><code class="value keyname">'VolumeDown'</code></a></td>
-                <td> - </td>
-                <td>The Volume Down key.</th>
+                <td> </td>
+                <td>The Volume Down key.</td>
                 <td class="category">Media</td>
               </tr>
               <tr>
                 <td><a id="key-VolumeMute"><code class="value keyname">'VolumeMute'</code></a></td>
-                <td> - </td>
-                <td>The Volume Mute key.</th>
+                <td> </td>
+                <td>The Volume Mute key.</td>
                 <td class="category">Media</td>
               </tr>
               <tr>
                 <td><a id="key-VolumeUp"><code class="value keyname">'VolumeUp'</code></a></td>
-                <td> - </td>
-                <td>The Volume Up key.</th>
+                <td> </td>
+                <td>The Volume Up key.</td>
                 <td class="category">Media</td>
               </tr>
               <tr>
                 <td><a id="key-MediaNextTrack"><code class="value keyname">'MediaNextTrack'</code></a></td>
-                <td> - </td>
-                <td>The Media Next Track key.</th>
+                <td> </td>
+                <td>The Media Next Track key.</td>
                 <td class="category">Media</td>
               </tr>
               <tr>
                 <td><a id="key-MediaPlayPause"><code class="value keyname">'MediaPlayPause'</code></a></td>
-                <td> - </td>
-                <td>The Media Play Pause key.</th>
+                <td> </td>
+                <td>The Media Play Pause key.</td>
                 <td class="category">Media</td>
               </tr>
               <tr>
                 <td><a id="key-MediaPreviousTrack"><code class="value keyname">'MediaPreviousTrack'</code></a></td>
-                <td> - </td>
-                <td>The Media Previous Track key.</th>
+                <td> </td>
+                <td>The Media Previous Track key.</td>
                 <td class="category">Media</td>
               </tr>
               <tr>
                 <td><a id="key-MediaStop"><code class="value keyname">'MediaStop'</code></a></td>
-                <td> - </td>
-                <td>The Media Stop key.</th>
+                <td> </td>
+                <td>The Media Stop key.</td>
                 <td class="category">Media</td>
               </tr>
               <tr>
                 <td><a id="key-Pause"><code class="value keyname">'Pause'</code></a></td>
-                <td> - </td>
-                <td>The Pause key.</th>
+                <td> </td>
+                <td>The Pause key.</td>
                 <td class="category">Media</td>
               </tr>
               <tr>
                 <td><a id="key-Play"><code class="value keyname">'Play'</code></a></td>
-                <td> - </td>
-                <td>The Play key.</th>
+                <td> </td>
+                <td>The Play key.</td>
                 <td class="category">Media</td>
               </tr>
               <tr>
                 <td><a id="key-SelectMedia"><code class="value keyname">'SelectMedia'</code></a></td>
-                <td> - </td>
-                <td>The Select Media key.</th>
+                <td> </td>
+                <td>The Select Media key.</td>
                 <td class="category">Media</td>
               </tr>
               <tr>
                 <td><a id="key-Stop"><code class="value keyname">'Stop'</code></a></td>
-                <td> - </td>
-                <td>The Stop key.</th>
+                <td> </td>
+                <td>The Stop key.</td>
                 <td class="category">Media</td>
               </tr>
 
 
               <tr>
                 <td><a id="key-Unidentified"><code class="value keyname">'Unidentified'</code></a></td>
-                <td> - </td>
+                <td> </td>
                 <td>This key value is used when an implementations is unable to identify another key value, due to either hardware, platform, or software constraints.  <span class="warning" id="_64"><strong>Warning!</strong> Conforming implementation must only use this key value when there is no way for the implementation to detect the key value, and does not indicate a conforming implementation by itself.</span></th>
                 <td class="category">?</td>
               </tr>