Update `data_model` scraped XML version to latest spec and scraper (#32170)

* Ran scraper 1.2.4 on the latest spec version

* Add in-progress scraping

* Remove odd comment parts from NetworkCommissioningCluster.xml

* Removed old files, re-generated new ones

* Remove comments again

* Remove the cluster suffix in names of clusters

* Fix parsing error

* Fix direction logic

* Fix direction key
diff --git a/data_model/README.md b/data_model/README.md
index 36f38ca..a26b1c4 100644
--- a/data_model/README.md
+++ b/data_model/README.md
@@ -17,7 +17,7 @@
 You will require access to the following tools locally:
 
 -   `scraper`. A binary copy generally available
-    [here](https://github.com/csa-data-model/projects/tree/main/DM-Editor/bin/1.2.0/scrape)
+    [here](https://github.com/csa-data-model/projects/tree/main/DM-Editor/bin/scrape)
 -   Specification repository checkout from
     https://github.com/CHIP-Specifications/connectedhomeip-spec
 
diff --git a/data_model/clusters/ACL-Cluster.xml b/data_model/clusters/ACL-Cluster.xml
index 9ef2f50..b965eb8 100644
--- a/data_model/clusters/ACL-Cluster.xml
+++ b/data_model/clusters/ACL-Cluster.xml
@@ -55,10 +55,13 @@
 508 Second Street, Suite 206

 Davis, CA 95616, USA

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x001F" name="AccessControl" revision="1">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x001F" name="Access Control" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x001F" name="AccessControl"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="ACL" scope="Node"/>
   <dataTypes>
     <enum name="AccessControlEntryAuthModeEnum">
@@ -112,25 +115,27 @@
         <access fabricSensitive="true"/>
         <mandatoryConform/>
       </field>
-      <field id="3" name="Subjects" type="ref_DataTypeList[SubjectID]">
+      <field id="3" name="Subjects" type="list">
+        <entry type="SubjectID"/>
         <access fabricSensitive="true"/>
         <quality nullable="true"/>
         <mandatoryConform/>
-        <constraint type="max" value="SubjectsPerAccessControlEntry"/>
+        <constraint type="maxCount" value="SubjectsPerAccessControlEntry"/>
       </field>
-      <field id="4" name="Targets" type="ref_DataTypeList[AccessControlTargetStruct Type]">
+      <field id="4" name="Targets" type="list">
+        <entry type="AccessControlTargetStruct"/>
         <access fabricSensitive="true"/>
         <quality nullable="true"/>
         <mandatoryConform/>
-        <constraint type="max" value="TargetsPerAccessControlEntry"/>
+        <constraint type="maxCount" value="TargetsPerAccessControlEntry"/>
       </field>
       <access fabricScoped="true"/>
     </struct>
     <struct name="AccessControlExtensionStruct">
-      <field id="1" name="Data" type="ref_DataTypeOctstr">
+      <field id="1" name="Data" type="octstr">
         <access fabricSensitive="true"/>
         <mandatoryConform/>
-        <constraint type="max" value="128"/>
+        <constraint type="maxLength" value="128"/>
       </field>
       <access fabricScoped="true"/>
     </struct>
@@ -150,12 +155,14 @@
     </struct>
   </dataTypes>
   <attributes>
-    <attribute id="0x0000" name="ACL" type="ref_DataTypeList[AccessControlEntryStruct Type]" default="desc">
+    <attribute id="0x0000" name="ACL" type="list" default="desc">
+      <entry type="AccessControlEntryStruct"/>
       <access read="true" write="true" readPrivilege="admin" writePrivilege="admin" fabricScoped="true"/>
       <mandatoryConform/>
       <constraint type="desc"/>
     </attribute>
-    <attribute id="0x0001" name="Extension" type="ref_DataTypeList[AccessControlExtensionStruct Type]" default="desc">
+    <attribute id="0x0001" name="Extension" type="list" default="desc">
+      <entry type="AccessControlExtensionStruct"/>
       <access read="true" write="true" readPrivilege="admin" writePrivilege="admin" fabricScoped="true"/>
       <optionalConform/>
       <constraint type="desc"/>
diff --git a/data_model/clusters/AccountLogin.xml b/data_model/clusters/AccountLogin.xml
index 91f675e..db87d05 100644
--- a/data_model/clusters/AccountLogin.xml
+++ b/data_model/clusters/AccountLogin.xml
@@ -54,14 +54,20 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x050E" name="Account Login" revision="1">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x050E" name="Account Login" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
+    <revision revision="2" summary="Add support for 8 character PIN code, Add Node to Login, Logout commands. Add LoggedOut event."/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x050E" name="Account Login"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="ALOGIN" scope="Endpoint"/>
   <commands>
-    <command id="0x00" name="GetSetupPIN" response="GetSetupPINResponse">
+    <command id="0x00" name="GetSetupPIN" direction="commandToServer" response="GetSetupPINResponse">
       <access invokePrivilege="admin" fabricScoped="true" timed="true"/>
       <mandatoryConform/>
       <field id="0" name="TempAccountIdentifier" type="string">
@@ -70,14 +76,14 @@
       </field>
     </command>
     <command id="0x01" name="GetSetupPINResponse" direction="responseFromServer">
-      <access invokePrivilege="operate" fabricScoped="true"/>
+      <access fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="SetupPIN" type="string">
         <mandatoryConform/>
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x02" name="Login" response="Y">
+    <command id="0x02" name="Login" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" fabricScoped="true" timed="true"/>
       <mandatoryConform/>
       <field id="0" name="TempAccountIdentifier" type="string">
@@ -86,12 +92,27 @@
       </field>
       <field id="1" name="SetupPIN" type="string">
         <mandatoryConform/>
-        <constraint type="minLength" value="11"/>
+        <constraint type="minLength" value="8"/>
+      </field>
+      <field id="2" name="Node" type="node-id">
+        <optionalConform/>
       </field>
     </command>
-    <command id="0x03" name="Logout" response="Y">
+    <command id="0x03" name="Logout" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" fabricScoped="true" timed="true"/>
       <mandatoryConform/>
+      <field id="0" name="Node" type="node-id">
+        <optionalConform/>
+      </field>
     </command>
   </commands>
+  <events>
+    <event id="0x00" name="LoggedOut" priority="critical">
+      <access readPrivilege="admin" fabricSensitive="true"/>
+      <optionalConform/>
+      <field id="0" name="Node" type="node-id">
+        <optionalConform/>
+      </field>
+    </event>
+  </events>
 </cluster>
\ No newline at end of file
diff --git a/data_model/clusters/AdminCommissioningCluster.xml b/data_model/clusters/AdminCommissioningCluster.xml
index b94b25e..eea41bc 100644
--- a/data_model/clusters/AdminCommissioningCluster.xml
+++ b/data_model/clusters/AdminCommissioningCluster.xml
@@ -1,7 +1,5 @@
 <?xml version="1.0"?>
 <!--

-link:../matter-defines.adoc[]

-

 Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.

 The information within this document is the property of the Connectivity

 Standards Alliance and its use and disclosure are restricted, except as

@@ -61,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x003C" name="Administrator Commissioning"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="CADMIN" scope="Node"/>
   <features>
     <feature bit="0" code="BC" name="Basic" summary="Node supports Basic Commissioning Method.">
@@ -93,21 +94,21 @@
       <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
       <mandatoryConform/>
     </attribute>
-    <attribute id="0x0002" name="AdminVendorId" type="ref_DataTypeVendorId">
+    <attribute id="0x0002" name="AdminVendorId" type="vendor-id">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
       <mandatoryConform/>
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="OpenCommissioningWindow" response="Y">
+    <command id="0x00" name="OpenCommissioningWindow" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform/>
       <field id="0" name="CommissioningTimeout" type="uint16">
         <mandatoryConform/>
         <constraint type="desc"/>
       </field>
-      <field id="1" name="PAKEPasscodeVerifier" type="ref_DataTypeOctstr">
+      <field id="1" name="PAKEPasscodeVerifier" type="octstr">
         <mandatoryConform/>
       </field>
       <field id="2" name="Discriminator" type="uint16">
@@ -118,12 +119,12 @@
         <mandatoryConform/>
         <constraint type="between" from="1000" to="100000"/>
       </field>
-      <field id="4" name="Salt" type="ref_DataTypeOctstr">
+      <field id="4" name="Salt" type="octstr">
         <mandatoryConform/>
-        <constraint type="between" from="16" to="32"/>
+        <constraint type="lengthBetween" from="16" to="32"/>
       </field>
     </command>
-    <command id="0x01" name="OpenBasicCommissioningWindow" response="Y">
+    <command id="0x01" name="OpenBasicCommissioningWindow" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform>
         <feature name="BC"/>
@@ -133,7 +134,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x02" name="RevokeCommissioning" response="Y">
+    <command id="0x02" name="RevokeCommissioning" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform/>
     </command>
diff --git a/data_model/clusters/AirQuality.xml b/data_model/clusters/AirQuality.xml
index 59f7550..2e188b9 100644
--- a/data_model/clusters/AirQuality.xml
+++ b/data_model/clusters/AirQuality.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x005B" name="Air Quality" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial version of the Air Quality cluster"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x005B" name="Air Quality"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="AIRQUAL" scope="Endpoint"/>
   <features>
     <feature bit="0" code="FAIR" name="Fair" summary="Cluster supports the Fair air quality level">
diff --git a/data_model/clusters/AlarmBase.xml b/data_model/clusters/AlarmBase.xml
index 9ba73c1..f4ffc63 100644
--- a/data_model/clusters/AlarmBase.xml
+++ b/data_model/clusters/AlarmBase.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Alarm Base" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial revision"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId name="Alarm Base"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="ALARM" scope="Endpoint"/>
   <features>
     <feature bit="0" code="RESET" name="Reset" summary="Supports the ability to reset alarms">
@@ -91,7 +96,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="Reset" response="Y">
+    <command id="0x00" name="Reset" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="RESET"/>
@@ -100,7 +105,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x01" name="ModifyEnabledAlarms" response="Y">
+    <command id="0x01" name="ModifyEnabledAlarms" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <optionalConform/>
       <field id="0" name="Mask" type="AlarmBitmap" default="0">
diff --git a/data_model/clusters/ApplicationBasic.xml b/data_model/clusters/ApplicationBasic.xml
index 086839a..fa197a8 100644
--- a/data_model/clusters/ApplicationBasic.xml
+++ b/data_model/clusters/ApplicationBasic.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x050D" name="Application Basic" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x050D" name="Application Basic"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="APBSC" scope="Endpoint"/>
   <dataTypes>
     <enum name="ApplicationStatusEnum">
diff --git a/data_model/clusters/ApplicationLauncher.xml b/data_model/clusters/ApplicationLauncher.xml
index 5d71698..6b84436 100644
--- a/data_model/clusters/ApplicationLauncher.xml
+++ b/data_model/clusters/ApplicationLauncher.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x050C" name="Application Launcher" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x050C" name="Application Launcher"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="APPLAUNCHER" scope="Endpoint"/>
   <features>
     <feature bit="0" code="AP" name="ApplicationPlatform" summary="Support for attributes and commands required for endpoint to support launching any application within the supported application catalogs">
@@ -111,7 +116,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="LaunchApp" response="LauncherResponse">
+    <command id="0x00" name="LaunchApp" direction="commandToServer" response="LauncherResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Application" type="ApplicationStruct">
@@ -124,7 +129,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x01" name="StopApp" response="LauncherResponse">
+    <command id="0x01" name="StopApp" direction="commandToServer" response="LauncherResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Application" type="ApplicationStruct" default="MS">
@@ -134,7 +139,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x02" name="HideApp" response="LauncherResponse">
+    <command id="0x02" name="HideApp" direction="commandToServer" response="LauncherResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Application" type="ApplicationStruct" default="MS">
@@ -145,7 +150,6 @@
       </field>
     </command>
     <command id="0x03" name="LauncherResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="StatusEnum">
         <mandatoryConform/>
diff --git a/data_model/clusters/AudioOutput.xml b/data_model/clusters/AudioOutput.xml
index 176e75b..468ba27 100644
--- a/data_model/clusters/AudioOutput.xml
+++ b/data_model/clusters/AudioOutput.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x050B" name="Audio Output" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x050B" name="Audio Output"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="AUDIOOUTPUT" scope="Endpoint"/>
   <features>
     <feature bit="0" code="NU" name="NameUpdates" summary="Supports updates to output names">
@@ -111,14 +116,14 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="SelectOutput" response="Y">
+    <command id="0x00" name="SelectOutput" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Index" type="uint8">
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x01" name="RenameOutput" response="Y">
+    <command id="0x01" name="RenameOutput" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="NU"/>
diff --git a/data_model/clusters/BallastConfiguration.xml b/data_model/clusters/BallastConfiguration.xml
index 416b8cd..f25bef2 100644
--- a/data_model/clusters/BallastConfiguration.xml
+++ b/data_model/clusters/BallastConfiguration.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0301" name="Ballast Configuration" revision="4">
   <revisionHistory>
@@ -62,6 +64,9 @@
     <revision revision="3" summary="CCB 2881"/>
     <revision revision="4" summary="New data model format and notation"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0301" name="Ballast Configuration"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="BC" scope="Endpoint"/>
   <dataTypes>
     <bitmap name="BallastStatusBitmap">
diff --git a/data_model/clusters/BasicInformationCluster.xml b/data_model/clusters/BasicInformationCluster.xml
index 87fa765..82b9283 100644
--- a/data_model/clusters/BasicInformationCluster.xml
+++ b/data_model/clusters/BasicInformationCluster.xml
@@ -59,8 +59,11 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
     <revision revision="2" summary="Added ProductAppearance attribute"/>
-    <revision revision="3" summary="Added SpecificationVersion attribute"/>
+    <revision revision="3" summary="Added SpecificationVersion and MaxPathsPerInvoke attributes"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0028" name="Basic Information"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="BINFO" scope="Node"/>
   <dataTypes>
     <enum name="ColorEnum">
@@ -175,50 +178,50 @@
       <mandatoryConform/>
       <constraint type="desc"/>
     </attribute>
-    <attribute id="0x0001" name="VendorName" type="ref_DataTypeString" default="MS">
+    <attribute id="0x0001" name="VendorName" type="string" default="MS">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <mandatoryConform/>
-      <constraint type="max" value="32"/>
+      <constraint type="maxLength" value="32"/>
     </attribute>
-    <attribute id="0x0002" name="VendorID" type="ref_DataTypeVendorId" default="MS">
+    <attribute id="0x0002" name="VendorID" type="vendor-id" default="MS">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <mandatoryConform/>
     </attribute>
-    <attribute id="0x0003" name="ProductName" type="ref_DataTypeString" default="MS">
+    <attribute id="0x0003" name="ProductName" type="string" default="MS">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <mandatoryConform/>
-      <constraint type="max" value="32"/>
+      <constraint type="maxLength" value="32"/>
     </attribute>
     <attribute id="0x0004" name="ProductID" type="uint16" default="MS">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <mandatoryConform/>
     </attribute>
-    <attribute id="0x0005" name="NodeLabel" type="ref_DataTypeString" default="&quot;">
+    <attribute id="0x0005" name="NodeLabel" type="string" default="&quot;">
       <access read="true" write="true" readPrivilege="view" writePrivilege="manage"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
       <mandatoryConform/>
-      <constraint type="max" value="32"/>
+      <constraint type="maxLength" value="32"/>
     </attribute>
-    <attribute id="0x0006" name="Location" type="ref_DataTypeString" default="&quot;XX&quot;">
+    <attribute id="0x0006" name="Location" type="string" default="&quot;XX&quot;">
       <access read="true" write="true" readPrivilege="view" writePrivilege="admin"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
       <mandatoryConform/>
-      <constraint type="allowed" value="2"/>
+      <constraint type="maxLength" value="2"/>
     </attribute>
     <attribute id="0x0007" name="HardwareVersion" type="uint16" default="0">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <mandatoryConform/>
     </attribute>
-    <attribute id="0x0008" name="HardwareVersionString" type="ref_DataTypeString" default="MS">
+    <attribute id="0x0008" name="HardwareVersionString" type="string" default="MS">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <mandatoryConform/>
-      <constraint type="between" from="1" to="64"/>
+      <constraint type="lengthBetween" from="1" to="64"/>
     </attribute>
     <attribute id="0x0009" name="SoftwareVersion" type="uint32" default="0">
       <access read="true" readPrivilege="view"/>
@@ -226,41 +229,41 @@
       <mandatoryConform/>
       <constraint type="desc"/>
     </attribute>
-    <attribute id="0x000A" name="SoftwareVersionString" type="ref_DataTypeString" default="MS">
+    <attribute id="0x000A" name="SoftwareVersionString" type="string" default="MS">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <mandatoryConform/>
-      <constraint type="between" from="1" to="64"/>
+      <constraint type="lengthBetween" from="1" to="64"/>
     </attribute>
-    <attribute id="0x000B" name="ManufacturingDate" type="ref_DataTypeString" default="MS">
+    <attribute id="0x000B" name="ManufacturingDate" type="string" default="MS">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <optionalConform/>
-      <constraint type="between" from="8" to="16"/>
+      <constraint type="lengthBetween" from="8" to="16"/>
     </attribute>
-    <attribute id="0x000C" name="PartNumber" type="ref_DataTypeString" default="MS">
+    <attribute id="0x000C" name="PartNumber" type="string" default="MS">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <optionalConform/>
-      <constraint type="max" value="32"/>
+      <constraint type="maxLength" value="32"/>
     </attribute>
-    <attribute id="0x000D" name="ProductURL" type="ref_DataTypeString" default="MS">
+    <attribute id="0x000D" name="ProductURL" type="string" default="MS">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <optionalConform/>
-      <constraint type="max" value="256"/>
+      <constraint type="maxLength" value="256"/>
     </attribute>
-    <attribute id="0x000E" name="ProductLabel" type="ref_DataTypeString" default="MS">
+    <attribute id="0x000E" name="ProductLabel" type="string" default="MS">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <optionalConform/>
-      <constraint type="max" value="64"/>
+      <constraint type="maxLength" value="64"/>
     </attribute>
-    <attribute id="0x000F" name="SerialNumber" type="ref_DataTypeString" default="MS">
+    <attribute id="0x000F" name="SerialNumber" type="string" default="MS">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <optionalConform/>
-      <constraint type="max" value="32"/>
+      <constraint type="maxLength" value="32"/>
     </attribute>
     <attribute id="0x0010" name="LocalConfigDisabled" type="bool" default="False">
       <access read="true" write="true" readPrivilege="view" writePrivilege="manage"/>
@@ -271,11 +274,11 @@
       <access read="true" readPrivilege="view"/>
       <optionalConform/>
     </attribute>
-    <attribute id="0x0012" name="UniqueID" type="ref_DataTypeString" default="MS">
+    <attribute id="0x0012" name="UniqueID" type="string" default="MS">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <optionalConform/>
-      <constraint type="max" value="32"/>
+      <constraint type="maxLength" value="32"/>
     </attribute>
     <attribute id="0x0013" name="CapabilityMinima" type="CapabilityMinimaStruct" default="MS">
       <access read="true" readPrivilege="view"/>
@@ -293,6 +296,12 @@
       <mandatoryConform/>
       <constraint type="desc"/>
     </attribute>
+    <attribute id="0x0016" name="MaxPathsPerInvoke" type="uint16" default="1">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform/>
+      <constraint type="min" value="1"/>
+    </attribute>
   </attributes>
   <events>
     <event id="0x00" name="StartUp" priority="critical">
diff --git a/data_model/clusters/Binding-Cluster.xml b/data_model/clusters/Binding-Cluster.xml
index 95f68f1..eca291a 100644
--- a/data_model/clusters/Binding-Cluster.xml
+++ b/data_model/clusters/Binding-Cluster.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x001E" name="Binding" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x001E" name="Binding"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="BIND" scope="Endpoint"/>
   <dataTypes>
     <struct name="TargetStruct">
diff --git a/data_model/clusters/BooleanState.xml b/data_model/clusters/BooleanState.xml
index 5b29807..9205310 100644
--- a/data_model/clusters/BooleanState.xml
+++ b/data_model/clusters/BooleanState.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0045" name="Boolean State" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0045" name="Boolean State"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="BOOL" scope="Endpoint"/>
   <attributes>
     <attribute id="0x0000" name="StateValue" type="bool">
diff --git a/data_model/clusters/BooleanStateConfiguration.xml b/data_model/clusters/BooleanStateConfiguration.xml
index 160cb7f..dc17f93 100644
--- a/data_model/clusters/BooleanStateConfiguration.xml
+++ b/data_model/clusters/BooleanStateConfiguration.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0080" name="Boolean State Configuration" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0080" name="Boolean State Configuration"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="BOOLCFG" scope="Endpoint"/>
   <features>
     <feature bit="0" code="VIS" name="Visual" summary="Supports visual alarms">
@@ -164,7 +169,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="SuppressAlarm" response="Y">
+    <command id="0x00" name="SuppressAlarm" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="SPRS"/>
@@ -173,7 +178,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x01" name="EnableDisableAlarm" response="Y">
+    <command id="0x01" name="EnableDisableAlarm" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <orTerm>
diff --git a/data_model/clusters/Channel.xml b/data_model/clusters/Channel.xml
index 9ace62c..1809f52 100644
--- a/data_model/clusters/Channel.xml
+++ b/data_model/clusters/Channel.xml
@@ -54,11 +54,17 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0504" name="Channel" revision="1">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0504" name="Channel" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
+    <revision revision="2" summary="Add EG and RP features, Identifier and Type to Channel Info for Over-the-Top (OTT) channel support."/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0504" name="Channel"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="CHANNEL" scope="Endpoint"/>
   <features>
     <feature bit="0" code="CL" name="ChannelList" summary="Provides list of available channels.">
@@ -67,8 +73,28 @@
     <feature bit="1" code="LI" name="LineupInfo" summary="Provides lineup info, which is a reference to an external source of lineup information.">
       <optionalConform/>
     </feature>
+    <feature bit="2" code="EG" name="ElectronicGuide" summary="Provides electronic program guide information.">
+      <optionalConform/>
+    </feature>
+    <feature bit="3" code="RP" name="RecordProgram" summary="Provides ability to record program.">
+      <optionalConform/>
+    </feature>
   </features>
   <dataTypes>
+    <enum name="ChannelTypeEnum">
+      <item value="0" name="Satellite" summary="The channel is sourced from a satellite provider.">
+        <mandatoryConform/>
+      </item>
+      <item value="1" name="Cable" summary="The channel is sourced from a cable provider.">
+        <mandatoryConform/>
+      </item>
+      <item value="2" name="Terrestrial" summary="The channel is sourced from a terrestrial provider.">
+        <mandatoryConform/>
+      </item>
+      <item value="3" name="OTT" summary="The channel is sourced from an OTT provider.">
+        <mandatoryConform/>
+      </item>
+    </enum>
     <enum name="LineupInfoTypeEnum">
       <item value="0" name="MSO" summary="Multi System Operator">
         <mandatoryConform/>
@@ -85,6 +111,17 @@
         <mandatoryConform/>
       </item>
     </enum>
+    <bitmap name="RecordingFlagBitmap">
+      <bitfield name="Scheduled" bit="0" summary="The program is scheduled for recording.">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="RecordSeries" bit="1" summary="The program series is scheduled for recording.">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Recorded" bit="2" summary="The program is recorded and available to be played.">
+        <mandatoryConform/>
+      </bitfield>
+    </bitmap>
     <struct name="ChannelInfoStruct">
       <field id="0" name="MajorNumber" type="uint16">
         <mandatoryConform/>
@@ -101,6 +138,22 @@
       <field id="4" name="AffiliateCallSign" type="string" default="empty">
         <optionalConform/>
       </field>
+      <field id="5" name="Identifier" type="string" default="empty">
+        <optionalConform/>
+      </field>
+      <field id="6" name="Type" type="ChannelTypeEnum" default="empty">
+        <optionalConform/>
+      </field>
+    </struct>
+    <struct name="ChannelPagingStruct">
+      <field id="0" name="PreviousToken" type="PageTokenStruct" default="null">
+        <quality nullable="true"/>
+        <optionalConform/>
+      </field>
+      <field id="1" name="NextToken" type="PageTokenStruct" default="null">
+        <quality nullable="true"/>
+        <optionalConform/>
+      </field>
     </struct>
     <struct name="LineupInfoStruct">
       <field id="0" name="OperatorName" type="string">
@@ -117,6 +170,132 @@
         <constraint type="desc"/>
       </field>
     </struct>
+    <struct name="PageTokenStruct">
+      <field id="0" name="Limit" type="uint16" default="0">
+        <optionalConform/>
+      </field>
+      <field id="1" name="After" type="string" default="empty">
+        <optionalConform/>
+        <constraint type="maxLength" value="8192"/>
+      </field>
+      <field id="2" name="Before" type="string" default="empty">
+        <optionalConform/>
+        <constraint type="maxLength" value="8192"/>
+      </field>
+    </struct>
+    <struct name="ProgramCastStruct">
+      <field id="0" name="Name" type="string">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="256"/>
+      </field>
+      <field id="1" name="Role" type="string">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="256"/>
+      </field>
+    </struct>
+    <struct name="ProgramCategoryStruct">
+      <field id="0" name="Category" type="string">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="256"/>
+      </field>
+      <field id="1" name="SubCategory" type="string" default="empty">
+        <optionalConform/>
+        <constraint type="maxLength" value="256"/>
+      </field>
+    </struct>
+    <struct name="ProgramStruct">
+      <field id="0" name="Identifier" type="string">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="255"/>
+      </field>
+      <field id="1" name="Channel" type="ChannelInfoStruct">
+        <mandatoryConform/>
+      </field>
+      <field id="2" name="StartTime" type="epoch-s">
+        <mandatoryConform/>
+      </field>
+      <field id="3" name="EndTime" type="epoch-s">
+        <mandatoryConform/>
+      </field>
+      <field id="4" name="Title" type="string">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="255"/>
+      </field>
+      <field id="5" name="Subtitle" type="string" default="empty">
+        <optionalConform/>
+        <constraint type="maxLength" value="255"/>
+      </field>
+      <field id="6" name="Description" type="string" default="empty">
+        <optionalConform/>
+        <constraint type="maxLength" value="8192"/>
+      </field>
+      <field id="7" name="AudioLanguages" type="list" default="empty">
+        <entry type="string">
+          <constraint type="maxLength" value="50"/>
+        </entry>
+        <optionalConform/>
+        <constraint type="maxCount" value="10"/>
+      </field>
+      <field id="8" name="Ratings" type="list" default="empty">
+        <entry type="string"/>
+        <optionalConform/>
+        <constraint type="maxCount" value="255"/>
+      </field>
+      <field id="9" name="ThumbnailUrl" type="string" default="empty">
+        <optionalConform/>
+        <constraint type="maxLength" value="8192"/>
+      </field>
+      <field id="10" name="PosterArtUrl" type="string" default="empty">
+        <optionalConform/>
+        <constraint type="maxLength" value="8192"/>
+      </field>
+      <field id="11" name="DvbiUrl" type="string" default="empty">
+        <optionalConform/>
+        <constraint type="maxLength" value="8192"/>
+      </field>
+      <field id="12" name="ReleaseDate" type="string" default="empty">
+        <optionalConform/>
+        <constraint type="maxLength" value="30"/>
+      </field>
+      <field id="13" name="ParentalGuidanceText" type="string" default="empty">
+        <optionalConform/>
+        <constraint type="maxLength" value="255"/>
+      </field>
+      <field id="14" name="RecordingFlag" type="RecordingFlagBitmap">
+        <mandatoryConform>
+          <feature name="RP"/>
+        </mandatoryConform>
+      </field>
+      <field id="15" name="SeriesInfo" type="SeriesInfoStruct" default="null">
+        <quality nullable="true"/>
+        <optionalConform/>
+      </field>
+      <field id="16" name="CategoryList" type="list" default="empty">
+        <entry type="ProgramCategoryStruct"/>
+        <optionalConform/>
+        <constraint type="maxCount" value="255"/>
+      </field>
+      <field id="17" name="CastList" type="list" default="empty">
+        <entry type="ProgramCastStruct"/>
+        <optionalConform/>
+        <constraint type="maxCount" value="255"/>
+      </field>
+      <field id="18" name="ExternalIDList" type="list" default="empty">
+        <entry type="ref_AdditionalInfoStruct"/>
+        <optionalConform/>
+        <constraint type="maxCount" value="255"/>
+      </field>
+    </struct>
+    <struct name="SeriesInfoStruct">
+      <field id="0" name="Season" type="string">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="256"/>
+      </field>
+      <field id="1" name="Episode" type="string">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="256"/>
+      </field>
+    </struct>
   </dataTypes>
   <attributes>
     <attribute id="0x0000" name="ChannelList" type="list" default="empty">
@@ -142,7 +321,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="ChangeChannel" response="ChangeChannelResponse">
+    <command id="0x00" name="ChangeChannel" direction="commandToServer" response="ChangeChannelResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <orTerm>
@@ -155,7 +334,6 @@
       </field>
     </command>
     <command id="0x01" name="ChangeChannelResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <orTerm>
           <feature name="CL"/>
@@ -170,7 +348,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x02" name="ChangeChannelByNumber" response="Y">
+    <command id="0x02" name="ChangeChannelByNumber" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="MajorNumber" type="uint16">
@@ -180,12 +358,108 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x03" name="SkipChannel" response="Y">
+    <command id="0x03" name="SkipChannel" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Count" type="int16">
         <mandatoryConform/>
       </field>
     </command>
+    <command id="0x04" name="GetProgramGuide" direction="commandToServer" response="ProgramGuideResponse">
+      <access invokePrivilege="operate"/>
+      <mandatoryConform>
+        <feature name="EG"/>
+      </mandatoryConform>
+      <field id="0" name="StartTime" type="epoch-s">
+        <mandatoryConform/>
+      </field>
+      <field id="1" name="EndTime" type="epoch-s">
+        <mandatoryConform/>
+      </field>
+      <field id="2" name="ChannelList" type="list" default="empty">
+        <entry type="ChannelInfoStruct"/>
+        <optionalConform/>
+        <constraint type="maxCount" value="255"/>
+      </field>
+      <field id="3" name="PageToken" type="PageTokenStruct" default="null">
+        <quality nullable="true"/>
+        <optionalConform/>
+      </field>
+      <field id="5" name="RecordingFlag" type="RecordingFlagBitmap" default="null">
+        <quality nullable="true"/>
+        <optionalConform/>
+      </field>
+      <field id="6" name="ExternalIDList" type="list" default="empty">
+        <entry type="ref_AdditionalInfoStruct"/>
+        <optionalConform/>
+        <constraint type="maxCount" value="255"/>
+      </field>
+      <field id="7" name="Data" type="octstr" default="MS">
+        <optionalConform/>
+        <constraint type="maxLength" value="8092"/>
+      </field>
+    </command>
+    <command id="0x05" name="ProgramGuideResponse" direction="responseFromServer">
+      <mandatoryConform>
+        <feature name="EG"/>
+      </mandatoryConform>
+      <field id="0" name="Paging" type="ChannelPagingStruct">
+        <mandatoryConform/>
+      </field>
+      <field id="1" name="ProgramList" type="list" default="empty">
+        <entry type="ProgramStruct"/>
+        <mandatoryConform/>
+      </field>
+    </command>
+    <command id="0x06" name="RecordProgram" direction="commandToServer" response="Y">
+      <access invokePrivilege="operate"/>
+      <mandatoryConform>
+        <andTerm>
+          <feature name="RP"/>
+          <feature name="EG"/>
+        </andTerm>
+      </mandatoryConform>
+      <field id="0" name="ProgramIdentifier" type="string">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="255"/>
+      </field>
+      <field id="1" name="ShouldRecordSeries" type="bool">
+        <mandatoryConform/>
+      </field>
+      <field id="2" name="ExternalIDList" type="list" default="empty">
+        <entry type="ref_AdditionalInfoStruct"/>
+        <optionalConform/>
+        <constraint type="maxCount" value="255"/>
+      </field>
+      <field id="3" name="Data" type="octstr" default="MS">
+        <optionalConform/>
+        <constraint type="maxLength" value="8092"/>
+      </field>
+    </command>
+    <command id="0x07" name="CancelRecordProgram" direction="commandToServer" response="Y">
+      <access invokePrivilege="operate"/>
+      <mandatoryConform>
+        <andTerm>
+          <feature name="RP"/>
+          <feature name="EG"/>
+        </andTerm>
+      </mandatoryConform>
+      <field id="0" name="ProgramIdentifier" type="string">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="255"/>
+      </field>
+      <field id="1" name="ShouldRecordSeries" type="bool">
+        <mandatoryConform/>
+      </field>
+      <field id="2" name="ExternalIDList" type="list" default="empty">
+        <entry type="ref_AdditionalInfoStruct"/>
+        <optionalConform/>
+        <constraint type="maxCount" value="255"/>
+      </field>
+      <field id="3" name="Data" type="octstr" default="MS">
+        <optionalConform/>
+        <constraint type="maxLength" value="8092"/>
+      </field>
+    </command>
   </commands>
 </cluster>
\ No newline at end of file
diff --git a/data_model/clusters/ColorControl.xml b/data_model/clusters/ColorControl.xml
index c0b0655..b913009 100644
--- a/data_model/clusters/ColorControl.xml
+++ b/data_model/clusters/ColorControl.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0300" name="Color Control" revision="6">
   <revisionHistory>
@@ -64,6 +66,9 @@
     <revision revision="5" summary="new data model format and notation, FeatureMap support"/>
     <revision revision="6" summary="Added clarifications to Scenes support for Matter"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0300" name="Color Control"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="CC" primaryTransaction="1"/>
   <features>
     <feature bit="0" code="HS" name="Hue/Saturation" summary="Supports color specification via hue/saturation.">
@@ -123,19 +128,19 @@
     </attribute>
     <attribute id="0x0005" name="DriftCompensation" type="enum8" default="-">
       <enum>
-        <item value="0" name="None">
+        <item value="0" name="Item0" summary="None">
           <mandatoryConform/>
         </item>
-        <item value="1" name="Other">
+        <item value="1" name="Item1" summary="Other / Unknown">
           <mandatoryConform/>
         </item>
-        <item value="2" name="Temperature">
+        <item value="2" name="Item2" summary="Temperature monitoring">
           <mandatoryConform/>
         </item>
-        <item value="3" name="Optical">
+        <item value="3" name="Item3" summary="Optical luminance monitoring and feedback">
           <mandatoryConform/>
         </item>
-        <item value="4" name="Optical">
+        <item value="4" name="Item4" summary="Optical color monitoring and feedback">
           <mandatoryConform/>
         </item>
       </enum>
@@ -158,13 +163,13 @@
     </attribute>
     <attribute id="0x0008" name="ColorMode" type="enum8" default="1">
       <enum>
-        <item value="0">
+        <item value="0" name="Item0">
           <mandatoryConform/>
         </item>
-        <item value="1">
+        <item value="1" name="Item1">
           <mandatoryConform/>
         </item>
-        <item value="2">
+        <item value="2" name="Item2">
           <mandatoryConform/>
         </item>
       </enum>
@@ -356,16 +361,16 @@
     </attribute>
     <attribute id="0x4001" name="EnhancedColorMode" type="enum8" default="1">
       <enum>
-        <item value="0">
+        <item value="0" name="Item0">
           <mandatoryConform/>
         </item>
-        <item value="1">
+        <item value="1" name="Item1">
           <mandatoryConform/>
         </item>
-        <item value="2">
+        <item value="2" name="Item2">
           <mandatoryConform/>
         </item>
-        <item value="3">
+        <item value="3" name="Item3">
           <mandatoryConform/>
         </item>
       </enum>
@@ -434,7 +439,7 @@
           <attribute name="ColorTemperatureMireds"/>
         </orTerm>
       </mandatoryConform>
-      <constraint type="between" from="ColorTempPhysicalMinMireds" to="ColorTemperatureMireds"/>
+      <constraint type="between" from="" to="ColorTemperatureMireds"/>
     </attribute>
     <attribute id="0x4010" name="StartUpColorTemperatureMireds" type="uint16" default="MS">
       <access read="true" write="true" readPrivilege="view" writePrivilege="manage"/>
@@ -449,7 +454,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="MoveToHue" response="Y">
+    <command id="0x00" name="MoveToHue" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="HS"/>
@@ -460,16 +465,16 @@
       </field>
       <field id="1" name="Direction" type="enum8">
         <enum>
-          <item value="0" name="Shortest">
+          <item value="0" name="Item0" summary="Shortest distance">
             <mandatoryConform/>
           </item>
-          <item value="1" name="Longest">
+          <item value="1" name="Item1" summary="Longest distance">
             <mandatoryConform/>
           </item>
-          <item value="2" name="Up">
+          <item value="2" name="Item2" summary="Up">
             <mandatoryConform/>
           </item>
-          <item value="3" name="Down">
+          <item value="3" name="Item3" summary="Down">
             <mandatoryConform/>
           </item>
         </enum>
@@ -489,23 +494,23 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x01" name="MoveHue" response="Y">
+    <command id="0x01" name="MoveHue" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="HS"/>
       </mandatoryConform>
       <field id="0" name="MoveMode" type="enum8">
         <enum>
-          <item value="0" name="Stop">
+          <item value="0" name="Item0" summary="Stop">
             <mandatoryConform/>
           </item>
-          <item value="1" name="Up">
+          <item value="1" name="Item1" summary="Up">
             <mandatoryConform/>
           </item>
-          <item value="2" name="Reserved">
+          <item value="2" name="Item2" summary="Reserved">
             <mandatoryConform/>
           </item>
-          <item value="3" name="Down">
+          <item value="3" name="Item3" summary="Down">
             <mandatoryConform/>
           </item>
         </enum>
@@ -524,23 +529,23 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x02" name="StepHue" response="Y">
+    <command id="0x02" name="StepHue" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="HS"/>
       </mandatoryConform>
       <field id="0" name="StepMode" type="enum8">
         <enum>
-          <item value="0" name="Reserved">
+          <item value="0" name="Item0" summary="Reserved">
             <mandatoryConform/>
           </item>
-          <item value="1" name="Up">
+          <item value="1" name="Item1" summary="Up">
             <mandatoryConform/>
           </item>
-          <item value="2" name="Reserved">
+          <item value="2" name="Item2" summary="Reserved">
             <mandatoryConform/>
           </item>
-          <item value="3" name="Down">
+          <item value="3" name="Item3" summary="Down">
             <mandatoryConform/>
           </item>
         </enum>
@@ -562,7 +567,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x03" name="MoveToSaturation" response="Y">
+    <command id="0x03" name="MoveToSaturation" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="HS"/>
@@ -584,23 +589,23 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x04" name="MoveSaturation" response="Y">
+    <command id="0x04" name="MoveSaturation" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="HS"/>
       </mandatoryConform>
       <field id="0" name="MoveMode" type="enum8">
         <enum>
-          <item value="0" name="Stop">
+          <item value="0" name="Item0" summary="Stop">
             <mandatoryConform/>
           </item>
-          <item value="1" name="Up">
+          <item value="1" name="Item1" summary="Up">
             <mandatoryConform/>
           </item>
-          <item value="2" name="Reserved">
+          <item value="2" name="Item2" summary="Reserved">
             <mandatoryConform/>
           </item>
-          <item value="3" name="Down">
+          <item value="3" name="Item3" summary="Down">
             <mandatoryConform/>
           </item>
         </enum>
@@ -619,23 +624,23 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x05" name="StepSaturation" response="Y">
+    <command id="0x05" name="StepSaturation" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="HS"/>
       </mandatoryConform>
       <field id="0" name="StepMode" type="enum8">
         <enum>
-          <item value="0" name="Reserved">
+          <item value="0" name="Item0" summary="Reserved">
             <mandatoryConform/>
           </item>
-          <item value="1" name="Up">
+          <item value="1" name="Item1" summary="Up">
             <mandatoryConform/>
           </item>
-          <item value="2" name="Reserved">
+          <item value="2" name="Item2" summary="Reserved">
             <mandatoryConform/>
           </item>
-          <item value="3" name="Down">
+          <item value="3" name="Item3" summary="Down">
             <mandatoryConform/>
           </item>
         </enum>
@@ -657,7 +662,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x06" name="MoveToHueAndSaturation" response="Y">
+    <command id="0x06" name="MoveToHueAndSaturation" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="HS"/>
@@ -683,7 +688,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x07" name="MoveToColor" response="Y">
+    <command id="0x07" name="MoveToColor" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="XY"/>
@@ -709,7 +714,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x08" name="MoveColor" response="Y">
+    <command id="0x08" name="MoveColor" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="XY"/>
@@ -729,7 +734,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x09" name="StepColor" response="Y">
+    <command id="0x09" name="StepColor" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="XY"/>
@@ -753,7 +758,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x0A" name="MoveToColorTemperature" response="Y">
+    <command id="0x0A" name="MoveToColorTemperature" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="CT"/>
@@ -775,7 +780,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x40" name="EnhancedMoveToHue" response="Y">
+    <command id="0x40" name="EnhancedMoveToHue" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="EHUE"/>
@@ -800,7 +805,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x41" name="EnhancedMoveHue" response="Y">
+    <command id="0x41" name="EnhancedMoveHue" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="EHUE"/>
@@ -821,7 +826,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x42" name="EnhancedStepHue" response="Y">
+    <command id="0x42" name="EnhancedStepHue" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="EHUE"/>
@@ -846,7 +851,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x43" name="EnhancedMoveToHueAndSaturation" response="Y">
+    <command id="0x43" name="EnhancedMoveToHueAndSaturation" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="EHUE"/>
@@ -871,7 +876,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x44" name="ColorLoopSet" response="Y">
+    <command id="0x44" name="ColorLoopSet" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="CL"/>
@@ -899,13 +904,13 @@
       </field>
       <field id="1" name="Action" type="enum8">
         <enum>
-          <item value="0" name="De">
+          <item value="0" name="Item0" summary="De-activate the color loop.">
             <mandatoryConform/>
           </item>
-          <item value="1" name="Activate">
+          <item value="1" name="Item1" summary="Activate the color loop from the value in the ColorLoopStartEnhancedHue field.">
             <mandatoryConform/>
           </item>
-          <item value="2" name="Activate">
+          <item value="2" name="Item2" summary="Activate the color loop from the value of the EnhancedCurrentHue attribute.">
             <mandatoryConform/>
           </item>
         </enum>
@@ -914,10 +919,10 @@
       </field>
       <field id="2" name="Direction" type="enum8">
         <enum>
-          <item value="0" name="Decrement">
+          <item value="0" name="Item0" summary="Decrement the hue in the color loop.">
             <mandatoryConform/>
           </item>
-          <item value="1" name="Increment">
+          <item value="1" name="Item1" summary="Increment the hue in the color loop.">
             <mandatoryConform/>
           </item>
         </enum>
@@ -939,7 +944,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x47" name="StopMoveStep" response="Y">
+    <command id="0x47" name="StopMoveStep" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <orTerm>
@@ -957,7 +962,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x4B" name="MoveColorTemperature" response="Y">
+    <command id="0x4B" name="MoveColorTemperature" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="CT"/>
@@ -986,7 +991,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x4C" name="StepColorTemperature" response="Y">
+    <command id="0x4C" name="StepColorTemperature" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="CT"/>
diff --git a/data_model/clusters/ContentAppObserver.xml b/data_model/clusters/ContentAppObserver.xml
index b426daa..184cce1 100644
--- a/data_model/clusters/ContentAppObserver.xml
+++ b/data_model/clusters/ContentAppObserver.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0510" name="Content App Observer" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0510" name="Content App Observer"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="APPOBSERVER" scope="Endpoint"/>
   <dataTypes>
     <enum name="StatusEnum">
@@ -71,7 +76,7 @@
     </enum>
   </dataTypes>
   <commands>
-    <command id="0x00" name="ContentAppMessage" response="ContentAppMessageResponse">
+    <command id="0x00" name="ContentAppMessage" direction="commandToServer" response="ContentAppMessageResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Data" type="string">
@@ -84,7 +89,6 @@
       </field>
     </command>
     <command id="0x01" name="ContentAppMessageResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="StatusEnum">
         <mandatoryConform/>
diff --git a/data_model/clusters/ContentControl.xml b/data_model/clusters/ContentControl.xml
index b51bdff..14996a7 100644
--- a/data_model/clusters/ContentControl.xml
+++ b/data_model/clusters/ContentControl.xml
@@ -59,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x050F" name="Content Control"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="CONCON" scope="Endpoint"/>
   <features>
     <feature bit="0" code="ST" name="ScreenTime" summary="Supports managing screen time limits.">
@@ -255,7 +258,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="UpdatePIN" response="Y">
+    <command id="0x00" name="UpdatePIN" direction="commandToServer" response="Y">
       <access invokePrivilege="manage" timed="true"/>
       <mandatoryConform>
         <feature name="PM"/>
@@ -269,14 +272,13 @@
         <constraint type="maxLength" value="6"/>
       </field>
     </command>
-    <command id="0x01" name="ResetPIN" response="ResetPINResponse">
+    <command id="0x01" name="ResetPIN" direction="commandToServer" response="ResetPINResponse">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform>
         <feature name="PM"/>
       </mandatoryConform>
     </command>
     <command id="0x02" name="ResetPINResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="PM"/>
       </mandatoryConform>
@@ -285,15 +287,15 @@
         <constraint type="maxLength" value="6"/>
       </field>
     </command>
-    <command id="0x03" name="Enable" response="Y">
+    <command id="0x03" name="Enable" direction="commandToServer" response="Y">
       <access invokePrivilege="manage" timed="true"/>
       <mandatoryConform/>
     </command>
-    <command id="0x04" name="Disable" response="Y">
+    <command id="0x04" name="Disable" direction="commandToServer" response="Y">
       <access invokePrivilege="manage" timed="true"/>
       <mandatoryConform/>
     </command>
-    <command id="0x05" name="AddBonusTime" response="Y">
+    <command id="0x05" name="AddBonusTime" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="ST"/>
@@ -307,7 +309,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x06" name="SetScreenDailyTime" response="Y">
+    <command id="0x06" name="SetScreenDailyTime" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="ST"/>
@@ -317,19 +319,19 @@
         <constraint type="max" value="86400"/>
       </field>
     </command>
-    <command id="0x07" name="BlockUnratedContent" response="Y">
+    <command id="0x07" name="BlockUnratedContent" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="BU"/>
       </mandatoryConform>
     </command>
-    <command id="0x08" name="UnblockUnratedContent" response="Y">
+    <command id="0x08" name="UnblockUnratedContent" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="BU"/>
       </mandatoryConform>
     </command>
-    <command id="0x09" name="SetOnDemandRatingThreshold" response="Y">
+    <command id="0x09" name="SetOnDemandRatingThreshold" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="OCR"/>
@@ -339,7 +341,7 @@
         <constraint type="maxLength" value="8"/>
       </field>
     </command>
-    <command id="0x0A" name="SetScheduledContentRatingThreshold" response="Y">
+    <command id="0x0A" name="SetScheduledContentRatingThreshold" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="SCR"/>
@@ -349,7 +351,7 @@
         <constraint type="maxLength" value="8"/>
       </field>
     </command>
-    <command id="0x0B" name="AddBlockChannels" response="Y">
+    <command id="0x0B" name="AddBlockChannels" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="BC"/>
@@ -359,7 +361,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x0C" name="RemoveBlockChannels" response="Y">
+    <command id="0x0C" name="RemoveBlockChannels" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="BC"/>
@@ -369,7 +371,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x0D" name="AddBlockApplications" response="Y">
+    <command id="0x0D" name="AddBlockApplications" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="BA"/>
@@ -379,7 +381,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x0E" name="RemoveBlockApplications" response="Y">
+    <command id="0x0E" name="RemoveBlockApplications" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="BA"/>
@@ -389,7 +391,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x0F" name="SetBlockContentTimeWindow" response="Y">
+    <command id="0x0F" name="SetBlockContentTimeWindow" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="BTW"/>
@@ -398,7 +400,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x10" name="RemoveBlockContentTimeWindow" response="Y">
+    <command id="0x10" name="RemoveBlockContentTimeWindow" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="BTW"/>
diff --git a/data_model/clusters/ContentLauncher.xml b/data_model/clusters/ContentLauncher.xml
index 2c310c6..b8f80de 100644
--- a/data_model/clusters/ContentLauncher.xml
+++ b/data_model/clusters/ContentLauncher.xml
@@ -54,11 +54,17 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x050A" name="Content Launcher" revision="1">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x050A" name="Content Launcher" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
+    <revision revision="2" summary="Add Seasons, Episode, Any and CurrentContext to search, Added Text/Audio tracks support with PlaybackPreferences field"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x050A" name="Content Launcher"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="CONTENTLAUNCHER" scope="Endpoint"/>
   <features>
     <feature bit="0" code="CS" name="ContentSearch" summary="Device supports content search (non-app specific)">
@@ -67,6 +73,15 @@
     <feature bit="1" code="UP" name="URLPlayback" summary="Device supports basic URL-based file playback">
       <optionalConform/>
     </feature>
+    <feature bit="2" code="AS" name="AdvancedSeek" summary="Enables clients to implement more advanced media seeking behavior in their user interface, such as for example a &quot;seek bar&quot;.">
+      <optionalConform/>
+    </feature>
+    <feature bit="3" code="TT" name="TextTracks" summary="Device or app supports Text Tracks.">
+      <optionalConform/>
+    </feature>
+    <feature bit="4" code="AT" name="AudioTracks" summary="Device or app supports Audio Tracks.">
+      <optionalConform/>
+    </feature>
   </features>
   <dataTypes>
     <enum name="MetricTypeEnum">
@@ -119,12 +134,21 @@
       <item value="11" name="SportsTeam" summary="SportsTeam represents the categorical information of a professional sports team; for example, &quot;University of Washington Huskies&quot;">
         <mandatoryConform/>
       </item>
-      <item value="12" name="Type" summary="The type of content requested. Supported types are &quot;Movie&quot;, &quot;MovieSeries&quot;, &quot;TVSeries&quot;, &quot;TVSeason&quot;, &quot;TVEpisode&quot;, &quot;SportsEvent&quot;, and &quot;Video&quot;">
+      <item value="12" name="Type" summary="The type of content requested. Supported types are &quot;Movie&quot;, &quot;MovieSeries&quot;, &quot;TVSeries&quot;, &quot;TVSeason&quot;, &quot;TVEpisode&quot;, &quot;Trailer&quot;, &quot;SportsEvent&quot;, &quot;LiveEvent&quot;, and &quot;Video&quot;">
         <mandatoryConform/>
       </item>
       <item value="13" name="Video" summary="Video represents the identifying data for a specific piece of video content; for example, &quot;Manchester by the Sea&quot;.">
         <mandatoryConform/>
       </item>
+      <item value="14" name="Season" summary="Season represents the specific season number within a TV series.">
+        <optionalConform/>
+      </item>
+      <item value="15" name="Episode" summary="Episode represents a specific episode number within a Season in a TV series.">
+        <optionalConform/>
+      </item>
+      <item value="16" name="Any" summary="Represents a search text input across many parameter types or even outside of the defined param types.">
+        <optionalConform/>
+      </item>
     </enum>
     <enum name="StatusEnum">
       <item value="0" name="Success" summary="Command succeeded">
@@ -136,6 +160,16 @@
       <item value="2" name="AuthFailed" summary="Requested URL returned 401 error code.">
         <mandatoryConform/>
       </item>
+      <item value="3" name="TextTrackNotAvailable" summary="Requested Text Track (in PlaybackPreferences) not available">
+        <mandatoryConform>
+          <feature name="TT"/>
+        </mandatoryConform>
+      </item>
+      <item value="4" name="AudioTrackNotAvailable" summary="Requested Audio Track (in PlaybackPreferences) not available">
+        <mandatoryConform>
+          <feature name="AT"/>
+        </mandatoryConform>
+      </item>
     </enum>
     <bitmap name="SupportedProtocolsBitmap">
       <bitfield name="DASH" bit="0" summary="Device supports Dynamic Adaptive Streaming over HTTP (DASH)">
@@ -206,6 +240,27 @@
         <optionalConform/>
       </field>
     </struct>
+    <struct name="PlaybackPreferencesStruct">
+      <field id="0" name="PlaybackPosition" type="uint64">
+        <quality nullable="true"/>
+        <mandatoryConform>
+          <feature name="AS"/>
+        </mandatoryConform>
+      </field>
+      <field id="1" name="TextTrack" type="TrackPreferenceStruct">
+        <quality nullable="true"/>
+        <mandatoryConform>
+          <feature name="TT"/>
+        </mandatoryConform>
+      </field>
+      <field id="2" name="AudioTracks" type="list">
+        <entry type="TrackPreferenceStruct"/>
+        <quality nullable="true"/>
+        <mandatoryConform>
+          <feature name="AT"/>
+        </mandatoryConform>
+      </field>
+    </struct>
     <struct name="StyleInformationStruct">
       <field id="0" name="ImageURL" type="string" default="MS">
         <optionalConform/>
@@ -220,6 +275,23 @@
         <optionalConform/>
       </field>
     </struct>
+    <struct name="TrackPreferenceStruct">
+      <field id="0" name="LanguageCode" type="string">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="32"/>
+      </field>
+      <field id="1" name="Characteristics" type="list" default="null">
+        <entry type="ref_CharacteristicEnum"/>
+        <quality nullable="true"/>
+        <optionalConform/>
+      </field>
+      <field id="2" name="AudioOutputIndex" type="uint8">
+        <quality nullable="true"/>
+        <mandatoryConform>
+          <feature name="AT"/>
+        </mandatoryConform>
+      </field>
+    </struct>
   </dataTypes>
   <attributes>
     <attribute id="0x0000" name="AcceptHeader" type="list" default="empty">
@@ -242,7 +314,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="LaunchContent" response="LauncherResponse">
+    <command id="0x00" name="LaunchContent" direction="commandToServer" response="LauncherResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="CS"/>
@@ -258,8 +330,15 @@
       <field id="2" name="Data" type="string" default="MS">
         <optionalConform/>
       </field>
+      <field id="3" name="PlaybackPreferences" type="PlaybackPreferencesStruct" default="MS">
+        <optionalConform/>
+      </field>
+      <field id="4" name="UseCurrentContext" type="bool" default="TRUE">
+        <optionalConform/>
+        <constraint type="desc"/>
+      </field>
     </command>
-    <command id="0x01" name="LaunchURL" response="LauncherResponse">
+    <command id="0x01" name="LaunchURL" direction="commandToServer" response="LauncherResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="UP"/>
@@ -273,9 +352,11 @@
       <field id="2" name="BrandingInformation" type="BrandingInformationStruct" default="MS">
         <optionalConform/>
       </field>
+      <field id="3" name="PlaybackPreferences" type="PlaybackPreferencesStruct" default="MS">
+        <optionalConform/>
+      </field>
     </command>
     <command id="0x02" name="LauncherResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <orTerm>
           <feature name="CS"/>
diff --git a/data_model/clusters/DemandResponseLoadControl.xml b/data_model/clusters/DemandResponseLoadControl.xml
index a5322bf..206201b 100644
--- a/data_model/clusters/DemandResponseLoadControl.xml
+++ b/data_model/clusters/DemandResponseLoadControl.xml
@@ -55,13 +55,16 @@
 508 Second Street, Suite 206

 Davis, CA 95616, USA

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0096" name="Demand Response and Load Control" revision="4">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Demand Response Load Control" revision="4">
   <revisionHistory>
     <revision revision="1" summary="mandatory global ClusterRevision attribute added"/>
     <revision revision="2" summary="Updated from SE1.4 version; CCB 1291 1297 1447 1513 1880 2287 2964 2965"/>
     <revision revision="3" summary="CCB 2966 3396"/>
     <revision revision="4" summary="Matter Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0096" name="Demand Response and Load Control"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="DRLC" scope="Endpoint"/>
   <features>
     <feature bit="0" code="ENRLG" name="Enrollment Groups" summary="Supports enrollment groups">
@@ -192,6 +195,59 @@
         <mandatoryConform/>
       </bitfield>
     </bitmap>
+    <bitmap name="DeviceClassBitmap">
+      <bitfield name="Field0" bit="0" summary="HVAC Compressor or Furnace">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field1" bit="1" summary="Strip Heaters/Baseboard Heaters">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field2" bit="2" summary="Water Heater">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field3" bit="3" summary="Pool Pump/Spa/Jacuzzi">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field4" bit="4" summary="Smart Appliances">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field5" bit="5" summary="Irrigation Pump">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field6" bit="6" summary="Managed Commercial &amp; Industrial (C&amp;I) loads">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field7" bit="7" summary="Simple misc. (Residential On/Off) loads">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field8" bit="8" summary="Exterior Lighting">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field9" bit="9" summary="Interior Lighting">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field10" bit="10" summary="Electric Vehicle">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field11" bit="11" summary="Generation Systems">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field12" bit="12" summary="Smart Inverter">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field13" bit="13" summary="EVSE">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field14" bit="14" summary="RESU (Residential Energy Storage Unit)">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field15" bit="15" summary="Energy Management System">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="Field16" bit="16" summary="Smart Energy Module">
+        <mandatoryConform/>
+      </bitfield>
+    </bitmap>
     <bitmap name="EventControlBitmap">
       <bitfield name="RandomStart" bit="0" summary="Randomize start time">
         <mandatoryConform/>
@@ -222,6 +278,41 @@
         <mandatoryConform/>
       </field>
     </struct>
+    <struct name="LoadControlEventStruct">
+      <field id="0" name="EventID" type="octstr" default="0">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="16"/>
+      </field>
+      <field id="1" name="ProgramID" type="octstr" default="null">
+        <quality nullable="true"/>
+        <mandatoryConform/>
+        <constraint type="maxLength" value="16"/>
+      </field>
+      <field id="2" name="Control" type="EventControlBitmap" default="1">
+        <mandatoryConform/>
+      </field>
+      <field id="3" name="DeviceClass" type="DeviceClassBitmap">
+        <mandatoryConform/>
+      </field>
+      <field id="4" name="EnrollmentGroup" type="uint8" default="null">
+        <quality nullable="true"/>
+        <mandatoryConform>
+          <feature name="ENRLG"/>
+        </mandatoryConform>
+      </field>
+      <field id="5" name="Criticality" type="CriticalityLevelEnum" default="0">
+        <mandatoryConform/>
+      </field>
+      <field id="6" name="StartTime" type="epoch-s" default="null">
+        <quality nullable="true"/>
+        <mandatoryConform/>
+      </field>
+      <field id="7" name="Transitions" type="list" default="empty">
+        <entry type="LoadControlEventTransitionStruct"/>
+        <mandatoryConform/>
+        <constraint type="maxCount" value="10"/>
+      </field>
+    </struct>
     <struct name="LoadControlEventTransitionStruct">
       <field id="1" name="Duration" type="uint16" default="0">
         <mandatoryConform/>
@@ -361,14 +452,14 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="RegisterLoadControlProgramRequest" response="Y">
+    <command id="0x00" name="RegisterLoadControlProgramRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="LoadControlProgram" type="LoadControlProgramStruct">
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x01" name="UnregisterLoadControlProgramRequest" response="Y">
+    <command id="0x01" name="UnregisterLoadControlProgramRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="LoadControlProgramID" type="octstr">
@@ -376,14 +467,14 @@
         <constraint type="maxLength" value="16"/>
       </field>
     </command>
-    <command id="0x02" name="AddLoadControlEventRequest" response="Y">
+    <command id="0x02" name="AddLoadControlEventRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Event" type="LoadControlEventStruct">
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x03" name="RemoveLoadControlEventRequest" response="Y">
+    <command id="0x03" name="RemoveLoadControlEventRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="EventID" type="octstr">
@@ -394,7 +485,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x04" name="ClearLoadControlEventsRequest" response="Y">
+    <command id="0x04" name="ClearLoadControlEventsRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <optionalConform/>
     </command>
diff --git a/data_model/clusters/Descriptor-Cluster.xml b/data_model/clusters/Descriptor-Cluster.xml
index 9944d8a..1b17fb4 100644
--- a/data_model/clusters/Descriptor-Cluster.xml
+++ b/data_model/clusters/Descriptor-Cluster.xml
@@ -54,12 +54,17 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x001D" name="Descriptor" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
     <revision revision="2" summary="Semantic tag list; TagList feature"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x001D" name="Descriptor"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="DESC" scope="Endpoint"/>
   <features>
     <feature bit="0" code="TAGLIST" name="TagList" summary="The TagList attribute is present"/>
diff --git a/data_model/clusters/DeviceEnergyManagement.xml b/data_model/clusters/DeviceEnergyManagement.xml
index 21f74a7..e493c5b 100644
--- a/data_model/clusters/DeviceEnergyManagement.xml
+++ b/data_model/clusters/DeviceEnergyManagement.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0098" name="Device Energy Management" revision="3">
   <revisionHistory>
@@ -61,6 +63,9 @@
     <revision revision="2" summary="Updates after 0.7 Ballot review"/>
     <revision revision="3" summary="Updates to match cluster spec updates"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0098" name="Device Energy Management"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="DEM" scope="Endpoint"/>
   <features>
     <feature bit="0" code="PA" name="PowerAdjustment" summary="Allows an EMS to make a temporary power
@@ -469,7 +474,7 @@
     </struct>
   </dataTypes>
   <commands>
-    <command id="0x00" name="PowerAdjustRequest" response="Y">
+    <command id="0x00" name="PowerAdjustRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="PA"/>
@@ -487,13 +492,13 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x01" name="CancelPowerAdjustRequest" response="Y">
+    <command id="0x01" name="CancelPowerAdjustRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="PA"/>
       </mandatoryConform>
     </command>
-    <command id="0x02" name="StartTimeAdjustRequest" response="Y">
+    <command id="0x02" name="StartTimeAdjustRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="STA"/>
@@ -507,7 +512,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x03" name="PauseRequest" response="Y">
+    <command id="0x03" name="PauseRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="PAU"/>
@@ -521,13 +526,13 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x04" name="ResumeRequest" response="Y">
+    <command id="0x04" name="ResumeRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="PAU"/>
       </mandatoryConform>
     </command>
-    <command id="0x05" name="ModifyForecastRequest" response="Y">
+    <command id="0x05" name="ModifyForecastRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="FA"/>
@@ -545,7 +550,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x06" name="RequestConstraintBasedForecast" response="Y">
+    <command id="0x06" name="RequestConstraintBasedForecast" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="CON"/>
@@ -560,7 +565,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x07" name="CancelRequest" response="Y">
+    <command id="0x07" name="CancelRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <orTerm>
diff --git a/data_model/clusters/DiagnosticLogsCluster.xml b/data_model/clusters/DiagnosticLogsCluster.xml
index 14f995c..5b67564 100644
--- a/data_model/clusters/DiagnosticLogsCluster.xml
+++ b/data_model/clusters/DiagnosticLogsCluster.xml
@@ -1,7 +1,5 @@
 <?xml version="1.0"?>
 <!--

-link:../matter-defines.adoc[]

-

 Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.

 The information within this document is the property of the Connectivity

 Standards Alliance and its use and disclosure are restricted, except as

@@ -61,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0032" name="Diagnostic Logs"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="DLOG" scope="Node"/>
   <dataTypes>
     <enum name="IntentEnum">
@@ -101,7 +102,7 @@
     </enum>
   </dataTypes>
   <commands>
-    <command id="0x00" name="RetrieveLogsRequest" response="RetrieveLogsResponse">
+    <command id="0x00" name="RetrieveLogsRequest" direction="commandToServer" response="RetrieveLogsResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Intent" type="IntentEnum">
@@ -110,22 +111,21 @@
       <field id="1" name="RequestedProtocol" type="TransferProtocolEnum">
         <mandatoryConform/>
       </field>
-      <field id="2" name="TransferFileDesignator" type="ref_DataTypeString">
+      <field id="2" name="TransferFileDesignator" type="string">
         <optionalConform/>
-        <constraint type="max" value="32"/>
+        <constraint type="maxLength" value="32"/>
       </field>
     </command>
     <command id="0x01" name="RetrieveLogsResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="StatusEnum">
         <mandatoryConform/>
       </field>
-      <field id="1" name="LogContent" type="ref_DataTypeOctstr">
+      <field id="1" name="LogContent" type="octstr">
         <mandatoryConform/>
-        <constraint type="max" value="1024"/>
+        <constraint type="maxLength" value="1024"/>
       </field>
-      <field id="2" name="UTCTimeStamp" type="ref_DataTypeEpochUs">
+      <field id="2" name="UTCTimeStamp" type="epoch-us">
         <optionalConform/>
       </field>
       <field id="3" name="TimeSinceBoot" type="ref_DataTypeSystemTimeUs">
diff --git a/data_model/clusters/DiagnosticsEthernet.xml b/data_model/clusters/DiagnosticsEthernet.xml
index 0ceb988..9d48224 100644
--- a/data_model/clusters/DiagnosticsEthernet.xml
+++ b/data_model/clusters/DiagnosticsEthernet.xml
@@ -59,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0037" name="Ethernet Network Diagnostics"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="DGETH" scope="Node"/>
   <features>
     <feature bit="0" code="PKTCNT" name="PacketCounts" summary="Node makes available the counts for the number of received and transmitted packets on the ethernet interface.">
@@ -160,7 +163,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="ResetCounts" response="Y">
+    <command id="0x00" name="ResetCounts" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <orTerm>
diff --git a/data_model/clusters/DiagnosticsGeneral.xml b/data_model/clusters/DiagnosticsGeneral.xml
index 072d75d..27046de 100644
--- a/data_model/clusters/DiagnosticsGeneral.xml
+++ b/data_model/clusters/DiagnosticsGeneral.xml
@@ -60,6 +60,9 @@
     <revision revision="1" summary="Initial Release"/>
     <revision revision="2" summary="UpTime attribute now mandatory, and added TimeSnapshot command, added DMTEST feature."/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0033" name="General Diagnostics"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="DGGEN" scope="Node"/>
   <features>
     <feature bit="0" code="DMTEST" name="DataModelTest" summary="Support specific testing needs for extended Data Model features">
@@ -180,9 +183,9 @@
       </item>
     </enum>
     <struct name="NetworkInterface">
-      <field id="0" name="Name" type="ref_DataTypeString">
+      <field id="0" name="Name" type="string">
         <mandatoryConform/>
-        <constraint type="max" value="32"/>
+        <constraint type="maxLength" value="32"/>
       </field>
       <field id="1" name="IsOperational" type="bool">
         <mandatoryConform/>
@@ -198,13 +201,15 @@
       <field id="4" name="HardwareAddress" type="Hardware Address">
         <mandatoryConform/>
       </field>
-      <field id="5" name="IPv4Addresses" type="ref_DataTypeList[ref_Ipv4Adr]">
+      <field id="5" name="IPv4Addresses" type="list">
+        <entry type="ref_Ipv4Adr"/>
         <mandatoryConform/>
-        <constraint type="max" value="4"/>
+        <constraint type="maxCount" value="4"/>
       </field>
-      <field id="6" name="IPv6Addresses" type="ref_DataTypeList[ref_Ipv6Adr]">
+      <field id="6" name="IPv6Addresses" type="list">
+        <entry type="ref_Ipv6Adr"/>
         <mandatoryConform/>
-        <constraint type="max" value="8"/>
+        <constraint type="maxCount" value="8"/>
       </field>
       <field id="7" name="Type" type="InterfaceTypeEnum">
         <mandatoryConform/>
@@ -212,10 +217,11 @@
     </struct>
   </dataTypes>
   <attributes>
-    <attribute id="0x0000" name="NetworkInterfaces" type="ref_DataTypeList[NetworkInterface Type]">
+    <attribute id="0x0000" name="NetworkInterfaces" type="list">
+      <entry type="NetworkInterface"/>
       <access read="true" readPrivilege="view"/>
       <mandatoryConform/>
-      <constraint type="max" value="8"/>
+      <constraint type="maxCount" value="8"/>
     </attribute>
     <attribute id="0x0001" name="RebootCount" type="uint16">
       <access read="true" readPrivilege="view"/>
@@ -236,20 +242,23 @@
       <access read="true" readPrivilege="view"/>
       <optionalConform/>
     </attribute>
-    <attribute id="0x0005" name="ActiveHardwareFaults" type="ref_DataTypeList[HardwareFaultEnum Type]">
+    <attribute id="0x0005" name="ActiveHardwareFaults" type="list">
+      <entry type="HardwareFaultEnum"/>
       <access read="true" readPrivilege="view"/>
       <optionalConform/>
-      <constraint type="max" value="11"/>
+      <constraint type="maxCount" value="11"/>
     </attribute>
-    <attribute id="0x0006" name="ActiveRadioFaults" type="ref_DataTypeList[RadioFaultEnum Type]">
+    <attribute id="0x0006" name="ActiveRadioFaults" type="list">
+      <entry type="RadioFaultEnum"/>
       <access read="true" readPrivilege="view"/>
       <optionalConform/>
-      <constraint type="max" value="7"/>
+      <constraint type="maxCount" value="7"/>
     </attribute>
-    <attribute id="0x0007" name="ActiveNetworkFaults" type="ref_DataTypeList[NetworkFaultEnum Type]">
+    <attribute id="0x0007" name="ActiveNetworkFaults" type="list">
+      <entry type="NetworkFaultEnum"/>
       <access read="true" readPrivilege="view"/>
       <optionalConform/>
-      <constraint type="max" value="4"/>
+      <constraint type="maxCount" value="4"/>
     </attribute>
     <attribute id="0x0008" name="TestEventTriggersEnabled" type="bool">
       <access read="true" readPrivilege="view"/>
@@ -260,7 +269,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="TestEventTrigger" response="Y">
+    <command id="0x00" name="TestEventTrigger" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform/>
       <field id="0" name="EnableKey" type="octstr">
@@ -271,12 +280,11 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x01" name="TimeSnapshot" response="TimeSnapshotResponse">
+    <command id="0x01" name="TimeSnapshot" direction="commandToServer" response="TimeSnapshotResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
     <command id="0x02" name="TimeSnapshotResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="SystemTimeMs" type="ref_DataTypeSystemTimeMs" default="MS">
         <mandatoryConform/>
@@ -286,7 +294,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x03" name="PayloadTestRequest" response="PayloadTestResponse">
+    <command id="0x03" name="PayloadTestRequest" direction="commandToServer" response="PayloadTestResponse">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="DMTEST"/>
@@ -318,37 +326,43 @@
     <event id="0x00" name="HardwareFaultChange" priority="critical">
       <access readPrivilege="view"/>
       <optionalConform/>
-      <field id="0" name="Current" type="ref_DataTypeList[HardwareFaultEnum Type]">
+      <field id="0" name="Current" type="list">
+        <entry type="HardwareFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="11"/>
+        <constraint type="maxCount" value="11"/>
       </field>
-      <field id="1" name="Previous" type="ref_DataTypeList[HardwareFaultEnum Type]">
+      <field id="1" name="Previous" type="list">
+        <entry type="HardwareFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="11"/>
+        <constraint type="maxCount" value="11"/>
       </field>
     </event>
     <event id="0x01" name="RadioFaultChange" priority="critical">
       <access readPrivilege="view"/>
       <optionalConform/>
-      <field id="0" name="Current" type="ref_DataTypeList[RadioFaultEnum Type]">
+      <field id="0" name="Current" type="list">
+        <entry type="RadioFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="7"/>
+        <constraint type="maxCount" value="7"/>
       </field>
-      <field id="1" name="Previous" type="ref_DataTypeList[RadioFaultEnum Type]">
+      <field id="1" name="Previous" type="list">
+        <entry type="RadioFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="7"/>
+        <constraint type="maxCount" value="7"/>
       </field>
     </event>
     <event id="0x02" name="NetworkFaultChange" priority="critical">
       <access readPrivilege="view"/>
       <optionalConform/>
-      <field id="0" name="Current" type="ref_DataTypeList[NetworkFaultEnum Type]">
+      <field id="0" name="Current" type="list">
+        <entry type="NetworkFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="4"/>
+        <constraint type="maxCount" value="4"/>
       </field>
-      <field id="1" name="Previous" type="ref_DataTypeList[NetworkFaultEnum Type]">
+      <field id="1" name="Previous" type="list">
+        <entry type="NetworkFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="4"/>
+        <constraint type="maxCount" value="4"/>
       </field>
     </event>
     <event id="0x03" name="BootReason" priority="critical">
diff --git a/data_model/clusters/DiagnosticsSoftware.xml b/data_model/clusters/DiagnosticsSoftware.xml
index 1057438..2c0b0b8 100644
--- a/data_model/clusters/DiagnosticsSoftware.xml
+++ b/data_model/clusters/DiagnosticsSoftware.xml
@@ -1,7 +1,5 @@
 <?xml version="1.0"?>
 <!--

-link:../matter-defines.adoc[]

-

 Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.

 The information within this document is the property of the Connectivity

 Standards Alliance and its use and disclosure are restricted, except as

@@ -61,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0034" name="Software Diagnostics"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="DGSW" scope="Node"/>
   <features>
     <feature bit="0" code="WTRMRK" name="Watermarks" summary="Node makes available the metrics for high watermark related to memory consumption.">
@@ -72,9 +73,9 @@
       <field id="0" name="ID" type="uint64">
         <mandatoryConform/>
       </field>
-      <field id="1" name="Name" type="ref_DataTypeString" default="empty">
+      <field id="1" name="Name" type="string" default="empty">
         <optionalConform/>
-        <constraint type="max" value="8"/>
+        <constraint type="maxLength" value="8"/>
       </field>
       <field id="2" name="StackFreeCurrent" type="uint32" default="MS">
         <optionalConform/>
@@ -88,10 +89,11 @@
     </struct>
   </dataTypes>
   <attributes>
-    <attribute id="0x0000" name="ThreadMetrics" type="ref_DataTypeList[ThreadMetricsStruct]">
+    <attribute id="0x0000" name="ThreadMetrics" type="list">
+      <entry type="ThreadMetricsStruct"/>
       <access read="true" readPrivilege="view"/>
       <optionalConform/>
-      <constraint type="max" value="64"/>
+      <constraint type="maxCount" value="64"/>
     </attribute>
     <attribute id="0x0001" name="CurrentHeapFree" type="uint64">
       <access read="true" readPrivilege="view"/>
@@ -109,7 +111,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="ResetWatermarks" response="Y">
+    <command id="0x00" name="ResetWatermarks" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="WTRMRK"/>
@@ -123,13 +125,13 @@
       <field id="0" name="ID" type="uint64" default="0">
         <mandatoryConform/>
       </field>
-      <field id="1" name="Name" type="ref_DataTypeString" default="empty">
+      <field id="1" name="Name" type="string" default="empty">
         <optionalConform/>
-        <constraint type="max" value="8"/>
+        <constraint type="maxLength" value="8"/>
       </field>
-      <field id="2" name="FaultRecording" type="ref_DataTypeOctstr" default="empty">
+      <field id="2" name="FaultRecording" type="octstr" default="empty">
         <optionalConform/>
-        <constraint type="max" value="1024"/>
+        <constraint type="maxLength" value="1024"/>
       </field>
     </event>
   </events>
diff --git a/data_model/clusters/DiagnosticsThread.xml b/data_model/clusters/DiagnosticsThread.xml
index 7d301fe..a05d5dc 100644
--- a/data_model/clusters/DiagnosticsThread.xml
+++ b/data_model/clusters/DiagnosticsThread.xml
@@ -1,7 +1,5 @@
 <?xml version="1.0"?>
 <!--

-link:../matter-defines.adoc[]

-

 Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.

 The information within this document is the property of the Connectivity

 Standards Alliance and its use and disclosure are restricted, except as

@@ -62,6 +60,9 @@
     <revision revision="1" summary="Initial Release"/>
     <revision revision="2" summary="Remove optionality from FrameErrorRate and MessageErrorRate"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0035" name="Thread Network Diagnostics"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="DGTHREAD" scope="Node"/>
   <features>
     <feature bit="0" code="PKTCNT" name="PacketCounts" summary="Server supports the counts for the number of received and transmitted packets on the Thread interface.">
@@ -292,11 +293,13 @@
         <feature name="ERRCNT"/>
       </mandatoryConform>
     </attribute>
-    <attribute id="0x0007" name="NeighborTable" type="ref_DataTypeList[NeighborTableStruct Type]" default="[]">
+    <attribute id="0x0007" name="NeighborTable" type="list" default="[]">
+      <entry type="NeighborTableStruct"/>
       <access read="true" readPrivilege="view"/>
       <mandatoryConform/>
     </attribute>
-    <attribute id="0x0008" name="RouteTable" type="ref_DataTypeList[RouteTableStruct Type]" default="[]">
+    <attribute id="0x0008" name="RouteTable" type="list" default="[]">
+      <entry type="RouteTableStruct"/>
       <access read="true" readPrivilege="view"/>
       <mandatoryConform/>
     </attribute>
@@ -654,14 +657,15 @@
       <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
       <mandatoryConform/>
     </attribute>
-    <attribute id="0x003E" name="ActiveNetworkFaultsList" type="ref_DataTypeList[NetworkFaultEnum Type]">
+    <attribute id="0x003E" name="ActiveNetworkFaultsList" type="list">
+      <entry type="NetworkFaultEnum"/>
       <access read="true" readPrivilege="view"/>
       <mandatoryConform/>
-      <constraint type="max" value="4"/>
+      <constraint type="maxCount" value="4"/>
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="ResetCounts" response="Y">
+    <command id="0x00" name="ResetCounts" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="ERRCNT"/>
@@ -679,13 +683,15 @@
     <event id="0x01" name="NetworkFaultChange" priority="info">
       <access readPrivilege="view"/>
       <optionalConform/>
-      <field id="0" name="Current" type="ref_DataTypeList[NetworkFaultEnum Type]">
+      <field id="0" name="Current" type="list">
+        <entry type="NetworkFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="4"/>
+        <constraint type="maxCount" value="4"/>
       </field>
-      <field id="1" name="Previous" type="ref_DataTypeList[NetworkFaultEnum Type]">
+      <field id="1" name="Previous" type="list">
+        <entry type="NetworkFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="4"/>
+        <constraint type="maxCount" value="4"/>
       </field>
     </event>
   </events>
diff --git a/data_model/clusters/DiagnosticsWiFi.xml b/data_model/clusters/DiagnosticsWiFi.xml
index 35c0523..49ef964 100644
--- a/data_model/clusters/DiagnosticsWiFi.xml
+++ b/data_model/clusters/DiagnosticsWiFi.xml
@@ -1,7 +1,5 @@
 <?xml version="1.0"?>
 <!--

-link:../matter-defines.adoc[]

-

 Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.

 The information within this document is the property of the Connectivity

 Standards Alliance and its use and disclosure are restricted, except as

@@ -57,10 +55,13 @@
 508 Second Street, Suite 206

 Davis, CA 95616, USA

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0036" name="Wi" revision="1">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Wi-Fi Network Diagnostics" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0036" name="Wi"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="DGWIFI" scope="Node"/>
   <features>
     <feature bit="0" code="PKTCNT" name="PacketCounts" summary="Node makes available the counts for the number of received and transmitted packets on the Wi-Fi interface.">
@@ -138,11 +139,11 @@
     </enum>
   </dataTypes>
   <attributes>
-    <attribute id="0x0000" name="BSSID" type="ref_DataTypeOctstr" default="null">
+    <attribute id="0x0000" name="BSSID" type="octstr" default="null">
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
       <mandatoryConform/>
-      <constraint type="allowed" value="6"/>
+      <constraint type="maxLength" value="6"/>
     </attribute>
     <attribute id="0x0001" name="SecurityType" type="SecurityTypeEnum" default="null">
       <access read="true" readPrivilege="view"/>
@@ -221,7 +222,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="ResetCounts" response="Y">
+    <command id="0x00" name="ResetCounts" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="ERRCNT"/>
diff --git a/data_model/clusters/DishwasherAlarm.xml b/data_model/clusters/DishwasherAlarm.xml
index 7fda78a..b3b67e2 100644
--- a/data_model/clusters/DishwasherAlarm.xml
+++ b/data_model/clusters/DishwasherAlarm.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance +

 508 Second Street, Suite 206 +

 Davis, CA 95616, USA

+

+:xrefstyle: short

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x005D" name="Dishwasher Alarm" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial revision"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x005D" name="Dishwasher Alarm"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Alarm Base" role="application" picsCode="DISHALM" scope="Endpoint"/>
   <dataTypes>
     <bitmap name="AlarmBitmap">
diff --git a/data_model/clusters/DoorLock.xml b/data_model/clusters/DoorLock.xml
index 4f84afc..6284b97 100644
--- a/data_model/clusters/DoorLock.xml
+++ b/data_model/clusters/DoorLock.xml
@@ -54,8 +54,10 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0101" name="Door Lock" revision="7">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0101" name="Door Lock" revision="8">
   <revisionHistory>
     <revision revision="1" summary="Mandatory global ClusterRevision attribute added; CCB 1811 1812 1821"/>
     <revision revision="2" summary="CCB 2430"/>
@@ -64,7 +66,11 @@
     <revision revision="5"/>
     <revision revision="6" summary="New data model format and notation. Added User features. General cleanup of functionality"/>
     <revision revision="7" summary="Added support for European door locks (unbolt feature)"/>
+    <revision revision="8" summary="Added support for Aliro credential provisioning"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0101" name="Door Lock"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="DRLK" scope="Endpoint"/>
   <features>
     <feature bit="0" code="PIN" name="PINCredential" summary="Lock supports PIN credentials (via keypad, or over-the-air)">
@@ -98,14 +104,19 @@
       <optionalConform/>
     </feature>
     <feature bit="8" code="USR" name="User" summary="Lock supports the user commands and database">
-      <optionalConform>
-        <orTerm>
-          <feature name="PIN"/>
-          <feature name="RID"/>
-          <feature name="FGP"/>
-          <feature name="FACE"/>
-        </orTerm>
-      </optionalConform>
+      <otherwiseConform>
+        <mandatoryConform>
+          <feature name="ALIRO"/>
+        </mandatoryConform>
+        <optionalConform>
+          <orTerm>
+            <feature name="PIN"/>
+            <feature name="RID"/>
+            <feature name="FGP"/>
+            <feature name="FACE"/>
+          </orTerm>
+        </optionalConform>
+      </otherwiseConform>
     </feature>
     <feature bit="9" code="NOT" name="Notification" summary="Operation and Programming Notifications">
       <optionalConform/>
@@ -119,6 +130,14 @@
     <feature bit="12" code="UBOLT" name="Unbolting" summary="Lock supports unbolting">
       <optionalConform/>
     </feature>
+    <feature bit="13" code="ALIRO" name="AliroProvisioning" summary="Lock supports Aliro credential provisioning as defined in ref_Aliro">
+      <optionalConform/>
+    </feature>
+    <feature bit="14" code="ALBU" name="AliroBLEUWB" summary="Lock supports the Bluetooth LE + UWB Access Control Flow as defined in ref_Aliro">
+      <optionalConform>
+        <feature name="ALIRO"/>
+      </optionalConform>
+    </feature>
   </features>
   <dataTypes>
     <enum name="AlarmCodeEnum">
@@ -201,6 +220,23 @@
           <feature name="FACE"/>
         </mandatoryConform>
       </item>
+      <item value="6" name="AliroCredentialIssuerKey" summary="A Credential Issuer public key as defined in ref_Aliro">
+        <mandatoryConform>
+          <feature name="ALIRO"/>
+        </mandatoryConform>
+      </item>
+      <item value="7" name="AliroEvictableEndpointKey" summary="An Endpoint public key as defined in ref_Aliro which can
+                            be evicted if space is needed for another endpoint key">
+        <mandatoryConform>
+          <feature name="ALIRO"/>
+        </mandatoryConform>
+      </item>
+      <item value="8" name="AliroNonEvictableEndpointKey" summary="An Endpoint public key as defined in ref_Aliro which cannot
+                            be evicted if space is needed for another endpoint key">
+        <mandatoryConform>
+          <feature name="ALIRO"/>
+        </mandatoryConform>
+      </item>
     </enum>
     <enum name="DataOperationTypeEnum">
       <item value="0" name="Add" summary="Data is being added or was added">
@@ -334,6 +370,21 @@
           <feature name="FACE"/>
         </mandatoryConform>
       </item>
+      <item value="11" name="AliroCredentialIssuerKey" summary="An Aliro credential issuer key credential was added, cleared, or modified.">
+        <mandatoryConform>
+          <feature name="ALIRO"/>
+        </mandatoryConform>
+      </item>
+      <item value="12" name="AliroEvictableEndpointKey" summary="An Aliro endpoint key credential which can be evicted credential was added, cleared, or modified.">
+        <mandatoryConform>
+          <feature name="ALIRO"/>
+        </mandatoryConform>
+      </item>
+      <item value="13" name="AliroNonEvictableEndpointKey" summary="An Aliro endpoint key credential which cannot be evicted was added, cleared, or modified.">
+        <mandatoryConform>
+          <feature name="ALIRO"/>
+        </mandatoryConform>
+      </item>
     </enum>
     <enum name="LockOperationTypeEnum">
       <item value="0" name="Lock" summary="Lock operation">
@@ -482,6 +533,11 @@
           <feature name="USR"/>
         </optionalConform>
       </item>
+      <item value="10" name="Aliro" summary="User change operation was a step-up credential provisioning as defined in ref_Aliro">
+        <mandatoryConform>
+          <feature name="ALIRO"/>
+        </mandatoryConform>
+      </item>
     </enum>
     <enum name="SoundVolumeEnum">
       <item value="0" name="Silent" summary="Silent Mode">
@@ -1053,9 +1109,84 @@
         </andTerm>
       </optionalConform>
     </attribute>
+    <attribute id="0x0080" name="AliroReaderVerificationKey" type="octstr" default="null">
+      <access read="true" readPrivilege="admin"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
+      <mandatoryConform>
+        <feature name="ALIRO"/>
+      </mandatoryConform>
+      <constraint type="maxLength" value="65"/>
+    </attribute>
+    <attribute id="0x0081" name="AliroReaderGroupIdentifier" type="octstr" default="null">
+      <access read="true" readPrivilege="admin"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
+      <mandatoryConform>
+        <feature name="ALIRO"/>
+      </mandatoryConform>
+      <constraint type="maxLength" value="16"/>
+    </attribute>
+    <attribute id="0x0082" name="AliroReaderGroupSubIdentifier" type="octstr">
+      <access read="true" readPrivilege="admin"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="ALIRO"/>
+      </mandatoryConform>
+      <constraint type="maxLength" value="16"/>
+    </attribute>
+    <attribute id="0x0083" name="AliroExpeditedTransactionSupportedProtocolVersions" type="list" default="empty">
+      <entry type="octstr">
+        <constraint type="maxLength" value="2"/>
+      </entry>
+      <access read="true" readPrivilege="admin"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="ALIRO"/>
+      </mandatoryConform>
+      <constraint type="maxCount" value="16"/>
+    </attribute>
+    <attribute id="0x0084" name="AliroGroupResolvingKey" type="octstr" default="null">
+      <access read="true" readPrivilege="admin"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
+      <mandatoryConform>
+        <feature name="ALBU"/>
+      </mandatoryConform>
+      <constraint type="maxLength" value="16"/>
+    </attribute>
+    <attribute id="0x0085" name="AliroSupportedBLEUWBProtocolVersions" type="list" default="empty">
+      <entry type="octstr">
+        <constraint type="maxLength" value="2"/>
+      </entry>
+      <access read="true" readPrivilege="admin"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="ALBU"/>
+      </mandatoryConform>
+      <constraint type="maxCount" value="16"/>
+    </attribute>
+    <attribute id="0x0086" name="AliroBLEAdvertisingVersion" type="uint8" default="0">
+      <access read="true" readPrivilege="admin"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="ALBU"/>
+      </mandatoryConform>
+    </attribute>
+    <attribute id="0x0087" name="NumberOfAliroCredentialIssuerKeysSupported" type="uint16" default="0">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="ALIRO"/>
+      </mandatoryConform>
+    </attribute>
+    <attribute id="0x0088" name="NumberOfAliroEndpointKeysSupported" type="uint16" default="0">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="ALIRO"/>
+      </mandatoryConform>
+    </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="LockDoor" response="Y">
+    <command id="0x00" name="LockDoor" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" timed="true"/>
       <mandatoryConform/>
       <field id="0" name="PINCode" type="octstr">
@@ -1067,7 +1198,7 @@
         </optionalConform>
       </field>
     </command>
-    <command id="0x01" name="UnlockDoor" response="Y">
+    <command id="0x01" name="UnlockDoor" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" timed="true"/>
       <mandatoryConform/>
       <field id="0" name="PINCode" type="octstr">
@@ -1079,11 +1210,11 @@
         </optionalConform>
       </field>
     </command>
-    <command id="0x02" name="Toggle" response="Y">
+    <command id="0x02" name="Toggle" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" timed="true"/>
       <disallowConform/>
     </command>
-    <command id="0x03" name="UnlockWithTimeout" response="Y">
+    <command id="0x03" name="UnlockWithTimeout" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" timed="true"/>
       <optionalConform/>
       <field id="0" name="Timeout" type="uint16">
@@ -1098,7 +1229,7 @@
         </optionalConform>
       </field>
     </command>
-    <command id="0x04" name="GetLogRecord" response="GetLogRecordResponse">
+    <command id="0x04" name="GetLogRecord" direction="commandToServer" response="GetLogRecordResponse">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="LOG"/>
@@ -1109,7 +1240,6 @@
       </field>
     </command>
     <command id="0x04" name="GetLogRecordResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="LOG"/>
       </mandatoryConform>
@@ -1138,7 +1268,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x05" name="SetPINCode" response="Y">
+    <command id="0x05" name="SetPINCode" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform>
         <andTerm>
@@ -1165,7 +1295,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x06" name="GetPINCode" response="GetPINCodeResponse">
+    <command id="0x06" name="GetPINCode" direction="commandToServer" response="GetPINCodeResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <andTerm>
@@ -1181,7 +1311,6 @@
       </field>
     </command>
     <command id="0x06" name="GetPINCodeResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <andTerm>
           <notTerm>
@@ -1209,7 +1338,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x07" name="ClearPINCode" response="Y">
+    <command id="0x07" name="ClearPINCode" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform>
         <andTerm>
@@ -1225,7 +1354,7 @@
         <constraint type="allowed" value="0xFFFE"/>
       </field>
     </command>
-    <command id="0x08" name="ClearAllPINCodes" response="Y">
+    <command id="0x08" name="ClearAllPINCodes" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform>
         <andTerm>
@@ -1236,7 +1365,7 @@
         </andTerm>
       </mandatoryConform>
     </command>
-    <command id="0x09" name="SetUserStatus" response="Y">
+    <command id="0x09" name="SetUserStatus" direction="commandToServer" response="Y">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <andTerm>
@@ -1259,7 +1388,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x0A" name="GetUserStatus" response="GetUserStatusResponse">
+    <command id="0x0A" name="GetUserStatus" direction="commandToServer" response="GetUserStatusResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <andTerm>
@@ -1279,7 +1408,6 @@
       </field>
     </command>
     <command id="0x0A" name="GetUserStatusResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <notTerm>
           <feature name="USR"/>
@@ -1293,7 +1421,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x0B" name="SetWeekDaySchedule" response="Y">
+    <command id="0x0B" name="SetWeekDaySchedule" direction="commandToServer" response="Y">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <feature name="WDSCH"/>
@@ -1326,7 +1454,7 @@
         <constraint type="between" from="0" to="59"/>
       </field>
     </command>
-    <command id="0x0C" name="GetWeekDaySchedule" response="GetWeekDayScheduleResponse">
+    <command id="0x0C" name="GetWeekDaySchedule" direction="commandToServer" response="GetWeekDayScheduleResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <feature name="WDSCH"/>
@@ -1341,7 +1469,6 @@
       </field>
     </command>
     <command id="0x0C" name="GetWeekDayScheduleResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="WDSCH"/>
       </mandatoryConform>
@@ -1377,7 +1504,7 @@
         <constraint type="between" from="0" to="59"/>
       </field>
     </command>
-    <command id="0x0D" name="ClearWeekDaySchedule" response="Y">
+    <command id="0x0D" name="ClearWeekDaySchedule" direction="commandToServer" response="Y">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <feature name="WDSCH"/>
@@ -1392,7 +1519,7 @@
         <constraint type="between" from="1" to="NumberOfTotalUsersSupported"/>
       </field>
     </command>
-    <command id="0x0E" name="SetYearDaySchedule" response="Y">
+    <command id="0x0E" name="SetYearDaySchedule" direction="commandToServer" response="Y">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <feature name="YDSCH"/>
@@ -1412,7 +1539,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x0F" name="GetYearDaySchedule" response="GetYearDayScheduleResponse">
+    <command id="0x0F" name="GetYearDaySchedule" direction="commandToServer" response="GetYearDayScheduleResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <feature name="YDSCH"/>
@@ -1427,7 +1554,6 @@
       </field>
     </command>
     <command id="0x0F" name="GetYearDayScheduleResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="YDSCH"/>
       </mandatoryConform>
@@ -1450,7 +1576,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x10" name="ClearYearDaySchedule" response="Y">
+    <command id="0x10" name="ClearYearDaySchedule" direction="commandToServer" response="Y">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <feature name="YDSCH"/>
@@ -1465,7 +1591,7 @@
         <constraint type="between" from="1" to="NumberOfTotalUsersSupported"/>
       </field>
     </command>
-    <command id="0x11" name="SetHolidaySchedule" response="Y">
+    <command id="0x11" name="SetHolidaySchedule" direction="commandToServer" response="Y">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <feature name="HDSCH"/>
@@ -1484,7 +1610,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x12" name="GetHolidaySchedule" response="GetHolidayScheduleResponse">
+    <command id="0x12" name="GetHolidaySchedule" direction="commandToServer" response="GetHolidayScheduleResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <feature name="HDSCH"/>
@@ -1495,7 +1621,6 @@
       </field>
     </command>
     <command id="0x12" name="GetHolidayScheduleResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="HDSCH"/>
       </mandatoryConform>
@@ -1520,7 +1645,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x13" name="ClearHolidaySchedule" response="Y">
+    <command id="0x13" name="ClearHolidaySchedule" direction="commandToServer" response="Y">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <feature name="HDSCH"/>
@@ -1531,7 +1656,7 @@
         <constraint type="allowed" value="0xFE"/>
       </field>
     </command>
-    <command id="0x14" name="SetUserType" response="Y">
+    <command id="0x14" name="SetUserType" direction="commandToServer" response="Y">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <andTerm>
@@ -1553,7 +1678,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x15" name="GetUserType" response="GetUserTypeResponse">
+    <command id="0x15" name="GetUserType" direction="commandToServer" response="GetUserTypeResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <andTerm>
@@ -1573,7 +1698,6 @@
       </field>
     </command>
     <command id="0x15" name="GetUserTypeResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <notTerm>
           <feature name="USR"/>
@@ -1587,7 +1711,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x16" name="SetRFIDCode" response="Y">
+    <command id="0x16" name="SetRFIDCode" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform>
         <andTerm>
@@ -1615,7 +1739,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x17" name="GetRFIDCode" response="GetRFIDCodeResponse">
+    <command id="0x17" name="GetRFIDCode" direction="commandToServer" response="GetRFIDCodeResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <andTerm>
@@ -1631,7 +1755,6 @@
       </field>
     </command>
     <command id="0x17" name="GetRFIDCodeResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <andTerm>
           <notTerm>
@@ -1659,7 +1782,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x18" name="ClearRFIDCode" response="Y">
+    <command id="0x18" name="ClearRFIDCode" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform>
         <andTerm>
@@ -1675,7 +1798,7 @@
         <constraint type="allowed" value="0xFFFE"/>
       </field>
     </command>
-    <command id="0x19" name="ClearAllRFIDCodes" response="Y">
+    <command id="0x19" name="ClearAllRFIDCodes" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform>
         <andTerm>
@@ -1686,7 +1809,7 @@
         </andTerm>
       </mandatoryConform>
     </command>
-    <command id="0x1A" name="SetUser" response="Y">
+    <command id="0x1A" name="SetUser" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform>
         <feature name="USR"/>
@@ -1731,7 +1854,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x1B" name="GetUser" response="GetUserResponse">
+    <command id="0x1B" name="GetUser" direction="commandToServer" response="GetUserResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <feature name="USR"/>
@@ -1742,7 +1865,6 @@
       </field>
     </command>
     <command id="0x1C" name="GetUserResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="USR"/>
       </mandatoryConform>
@@ -1792,7 +1914,7 @@
         <constraint type="between" from="1" to="NumberOfTotalUsersSupported"/>
       </field>
     </command>
-    <command id="0x1D" name="ClearUser" response="Y">
+    <command id="0x1D" name="ClearUser" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform>
         <feature name="USR"/>
@@ -1844,7 +1966,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x22" name="SetCredential" response="SetCredentialResponse">
+    <command id="0x22" name="SetCredential" direction="commandToServer" response="SetCredentialResponse">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform>
         <feature name="USR"/>
@@ -1885,7 +2007,6 @@
       </field>
     </command>
     <command id="0x23" name="SetCredentialResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="USR"/>
       </mandatoryConform>
@@ -1904,7 +2025,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x24" name="GetCredentialStatus" response="GetCredentialStatusResponse">
+    <command id="0x24" name="GetCredentialStatus" direction="commandToServer" response="GetCredentialStatusResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <feature name="USR"/>
@@ -1914,7 +2035,6 @@
       </field>
     </command>
     <command id="0x25" name="GetCredentialStatusResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="USR"/>
       </mandatoryConform>
@@ -1939,8 +2059,15 @@
         <optionalConform/>
         <constraint type="desc"/>
       </field>
+      <field id="5" name="CredentialData" type="octstr">
+        <quality nullable="true"/>
+        <optionalConform>
+          <feature name="ALIRO"/>
+        </optionalConform>
+        <constraint type="desc"/>
+      </field>
     </command>
-    <command id="0x26" name="ClearCredential" response="Y">
+    <command id="0x26" name="ClearCredential" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" timed="true"/>
       <mandatoryConform>
         <feature name="USR"/>
@@ -1951,7 +2078,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x27" name="UnboltDoor" response="Y">
+    <command id="0x27" name="UnboltDoor" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" timed="true"/>
       <mandatoryConform>
         <feature name="UBOLT"/>
@@ -1965,6 +2092,36 @@
         </optionalConform>
       </field>
     </command>
+    <command id="0x28" name="SetAliroReaderConfig" direction="commandToServer" response="Y">
+      <access invokePrivilege="admin" timed="true"/>
+      <mandatoryConform>
+        <feature name="ALIRO"/>
+      </mandatoryConform>
+      <field id="0" name="SigningKey" type="octstr">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="32"/>
+      </field>
+      <field id="1" name="VerificationKey" type="octstr">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="65"/>
+      </field>
+      <field id="2" name="GroupIdentifier" type="octstr">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="16"/>
+      </field>
+      <field id="3" name="GroupResolvingKey" type="octstr">
+        <mandatoryConform>
+          <feature name="ALBU"/>
+        </mandatoryConform>
+        <constraint type="maxLength" value="16"/>
+      </field>
+    </command>
+    <command id="0x29" name="ClearAliroReaderConfig" direction="commandToServer" response="Y">
+      <access invokePrivilege="admin" timed="true"/>
+      <mandatoryConform>
+        <feature name="ALIRO"/>
+      </mandatoryConform>
+    </command>
   </commands>
   <events>
     <event id="0x00" name="DoorLockAlarm" priority="critical">
diff --git a/data_model/clusters/EVSE-Attributes.xml b/data_model/clusters/EVSE-Attributes.xml
deleted file mode 100644
index 2d492a2..0000000
--- a/data_model/clusters/EVSE-Attributes.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--

-Electric Vehicle Supply Equipment (EVSE) is equipment used to charge an Electric

-Vehicle (EV) or Plug-In Hybrid Electric Vehicle. This cluster provides an

-interface to the functionality of Electric Vehicle Supply Equipment (EVSE)

-management.

-

-Devices targeted by this cluster include Electric Vehicle Supply Equipment

-(EVSE). The cluster generically assumes a signaling protocol (J1772 in NA and

-IEC61851 in Europe and Asia) between the EVSE and Electric Vehicle (EV) that

-utilizes a pilot signal to manage the states of the charge. SAE J1772 and

-IEC61841 define Pilot signal as a modulated DC voltage on a single wire.

-

-Power Line Communication (PLC) is supported by some EVSEs (e.g. for support of

-ISO 15118) and may enable features such as Vehicle to Grid (V2G) or Vehicle to

-Home (V2H) that allows for bi-directional charging/discharging of electric

-vehicles.

-

-More modern EVSE devices may optionally support ISO 15118 to support

-bi-directional charging (Vehicle to Grid - V2G) and Plug and Charge

-capabilities.

-

-This cluster definition assumes AC charging only. DC charging options may be

-added in future revisions of this cluster.

-

-This cluster supports a safety mechanism that may lockout remote operation until

-the initial latching conditions have been met. Some of the fault conditions

-defined in SAE J1772, such as Ground-Fault Circuit Interrupter (GFCI) or

-Charging Circuit Interrupting Device (CCID), may require clearing by an operator

-by, for example, pressing a button on the equipment or breaker panel.

-

-Signals and data provided by Electric Vehicle (EV) are labeled using EV in

-control and attribute names. Signals and data provided by Electric Vehicle

-Supply Equipment (EVSE) are labeled using EVSE in control and attribute names.

-

-This EVSE cluster is written around support of a single EVSE. Having multiple

-EVSEs at home or a business is managed by backend system and outside scope of

-this cluster.

-

-Note that in many deployments the EVSE may be outside the home and may suffer

-from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows

-for a charging profile to be pre-configured, in case there is a temporary

-communications loss during a charging session.

--->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Attributes" revision=""/>
\ No newline at end of file
diff --git a/data_model/clusters/EVSE-Classification.xml b/data_model/clusters/EVSE-Classification.xml
deleted file mode 100644
index 22df357..0000000
--- a/data_model/clusters/EVSE-Classification.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--

-Electric Vehicle Supply Equipment (EVSE) is equipment used to charge an Electric

-Vehicle (EV) or Plug-In Hybrid Electric Vehicle. This cluster provides an

-interface to the functionality of Electric Vehicle Supply Equipment (EVSE)

-management.

-

-Devices targeted by this cluster include Electric Vehicle Supply Equipment

-(EVSE). The cluster generically assumes a signaling protocol (J1772 in NA and

-IEC61851 in Europe and Asia) between the EVSE and Electric Vehicle (EV) that

-utilizes a pilot signal to manage the states of the charge. SAE J1772 and

-IEC61841 define Pilot signal as a modulated DC voltage on a single wire.

-

-Power Line Communication (PLC) is supported by some EVSEs (e.g. for support of

-ISO 15118) and may enable features such as Vehicle to Grid (V2G) or Vehicle to

-Home (V2H) that allows for bi-directional charging/discharging of electric

-vehicles.

-

-More modern EVSE devices may optionally support ISO 15118 to support

-bi-directional charging (Vehicle to Grid - V2G) and Plug and Charge

-capabilities.

-

-This cluster definition assumes AC charging only. DC charging options may be

-added in future revisions of this cluster.

-

-This cluster supports a safety mechanism that may lockout remote operation until

-the initial latching conditions have been met. Some of the fault conditions

-defined in SAE J1772, such as Ground-Fault Circuit Interrupter (GFCI) or

-Charging Circuit Interrupting Device (CCID), may require clearing by an operator

-by, for example, pressing a button on the equipment or breaker panel.

-

-Signals and data provided by Electric Vehicle (EV) are labeled using EV in

-control and attribute names. Signals and data provided by Electric Vehicle

-Supply Equipment (EVSE) are labeled using EVSE in control and attribute names.

-

-This EVSE cluster is written around support of a single EVSE. Having multiple

-EVSEs at home or a business is managed by backend system and outside scope of

-this cluster.

-

-Note that in many deployments the EVSE may be outside the home and may suffer

-from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows

-for a charging profile to be pre-configured, in case there is a temporary

-communications loss during a charging session.

--->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Classification" revision=""/>
\ No newline at end of file
diff --git a/data_model/clusters/EVSE-ClusterID.xml b/data_model/clusters/EVSE-ClusterID.xml
deleted file mode 100644
index 6f84afe..0000000
--- a/data_model/clusters/EVSE-ClusterID.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--

-Electric Vehicle Supply Equipment (EVSE) is equipment used to charge an Electric

-Vehicle (EV) or Plug-In Hybrid Electric Vehicle. This cluster provides an

-interface to the functionality of Electric Vehicle Supply Equipment (EVSE)

-management.

-

-Devices targeted by this cluster include Electric Vehicle Supply Equipment

-(EVSE). The cluster generically assumes a signaling protocol (J1772 in NA and

-IEC61851 in Europe and Asia) between the EVSE and Electric Vehicle (EV) that

-utilizes a pilot signal to manage the states of the charge. SAE J1772 and

-IEC61841 define Pilot signal as a modulated DC voltage on a single wire.

-

-Power Line Communication (PLC) is supported by some EVSEs (e.g. for support of

-ISO 15118) and may enable features such as Vehicle to Grid (V2G) or Vehicle to

-Home (V2H) that allows for bi-directional charging/discharging of electric

-vehicles.

-

-More modern EVSE devices may optionally support ISO 15118 to support

-bi-directional charging (Vehicle to Grid - V2G) and Plug and Charge

-capabilities.

-

-This cluster definition assumes AC charging only. DC charging options may be

-added in future revisions of this cluster.

-

-This cluster supports a safety mechanism that may lockout remote operation until

-the initial latching conditions have been met. Some of the fault conditions

-defined in SAE J1772, such as Ground-Fault Circuit Interrupter (GFCI) or

-Charging Circuit Interrupting Device (CCID), may require clearing by an operator

-by, for example, pressing a button on the equipment or breaker panel.

-

-Signals and data provided by Electric Vehicle (EV) are labeled using EV in

-control and attribute names. Signals and data provided by Electric Vehicle

-Supply Equipment (EVSE) are labeled using EVSE in control and attribute names.

-

-This EVSE cluster is written around support of a single EVSE. Having multiple

-EVSEs at home or a business is managed by backend system and outside scope of

-this cluster.

-

-Note that in many deployments the EVSE may be outside the home and may suffer

-from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows

-for a charging profile to be pre-configured, in case there is a temporary

-communications loss during a charging session.

--->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Cluster ID" revision=""/>
\ No newline at end of file
diff --git a/data_model/clusters/EVSE-Commands.xml b/data_model/clusters/EVSE-Commands.xml
deleted file mode 100644
index 030565e..0000000
--- a/data_model/clusters/EVSE-Commands.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--

-Electric Vehicle Supply Equipment (EVSE) is equipment used to charge an Electric

-Vehicle (EV) or Plug-In Hybrid Electric Vehicle. This cluster provides an

-interface to the functionality of Electric Vehicle Supply Equipment (EVSE)

-management.

-

-Devices targeted by this cluster include Electric Vehicle Supply Equipment

-(EVSE). The cluster generically assumes a signaling protocol (J1772 in NA and

-IEC61851 in Europe and Asia) between the EVSE and Electric Vehicle (EV) that

-utilizes a pilot signal to manage the states of the charge. SAE J1772 and

-IEC61841 define Pilot signal as a modulated DC voltage on a single wire.

-

-Power Line Communication (PLC) is supported by some EVSEs (e.g. for support of

-ISO 15118) and may enable features such as Vehicle to Grid (V2G) or Vehicle to

-Home (V2H) that allows for bi-directional charging/discharging of electric

-vehicles.

-

-More modern EVSE devices may optionally support ISO 15118 to support

-bi-directional charging (Vehicle to Grid - V2G) and Plug and Charge

-capabilities.

-

-This cluster definition assumes AC charging only. DC charging options may be

-added in future revisions of this cluster.

-

-This cluster supports a safety mechanism that may lockout remote operation until

-the initial latching conditions have been met. Some of the fault conditions

-defined in SAE J1772, such as Ground-Fault Circuit Interrupter (GFCI) or

-Charging Circuit Interrupting Device (CCID), may require clearing by an operator

-by, for example, pressing a button on the equipment or breaker panel.

-

-Signals and data provided by Electric Vehicle (EV) are labeled using EV in

-control and attribute names. Signals and data provided by Electric Vehicle

-Supply Equipment (EVSE) are labeled using EVSE in control and attribute names.

-

-This EVSE cluster is written around support of a single EVSE. Having multiple

-EVSEs at home or a business is managed by backend system and outside scope of

-this cluster.

-

-Note that in many deployments the EVSE may be outside the home and may suffer

-from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows

-for a charging profile to be pre-configured, in case there is a temporary

-communications loss during a charging session.

--->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Commands" revision=""/>
\ No newline at end of file
diff --git a/data_model/clusters/EVSE-DataTypes.xml b/data_model/clusters/EVSE-DataTypes.xml
deleted file mode 100644
index 790d661..0000000
--- a/data_model/clusters/EVSE-DataTypes.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--

-Electric Vehicle Supply Equipment (EVSE) is equipment used to charge an Electric

-Vehicle (EV) or Plug-In Hybrid Electric Vehicle. This cluster provides an

-interface to the functionality of Electric Vehicle Supply Equipment (EVSE)

-management.

-

-Devices targeted by this cluster include Electric Vehicle Supply Equipment

-(EVSE). The cluster generically assumes a signaling protocol (J1772 in NA and

-IEC61851 in Europe and Asia) between the EVSE and Electric Vehicle (EV) that

-utilizes a pilot signal to manage the states of the charge. SAE J1772 and

-IEC61841 define Pilot signal as a modulated DC voltage on a single wire.

-

-Power Line Communication (PLC) is supported by some EVSEs (e.g. for support of

-ISO 15118) and may enable features such as Vehicle to Grid (V2G) or Vehicle to

-Home (V2H) that allows for bi-directional charging/discharging of electric

-vehicles.

-

-More modern EVSE devices may optionally support ISO 15118 to support

-bi-directional charging (Vehicle to Grid - V2G) and Plug and Charge

-capabilities.

-

-This cluster definition assumes AC charging only. DC charging options may be

-added in future revisions of this cluster.

-

-This cluster supports a safety mechanism that may lockout remote operation until

-the initial latching conditions have been met. Some of the fault conditions

-defined in SAE J1772, such as Ground-Fault Circuit Interrupter (GFCI) or

-Charging Circuit Interrupting Device (CCID), may require clearing by an operator

-by, for example, pressing a button on the equipment or breaker panel.

-

-Signals and data provided by Electric Vehicle (EV) are labeled using EV in

-control and attribute names. Signals and data provided by Electric Vehicle

-Supply Equipment (EVSE) are labeled using EVSE in control and attribute names.

-

-This EVSE cluster is written around support of a single EVSE. Having multiple

-EVSEs at home or a business is managed by backend system and outside scope of

-this cluster.

-

-Note that in many deployments the EVSE may be outside the home and may suffer

-from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows

-for a charging profile to be pre-configured, in case there is a temporary

-communications loss during a charging session.

--->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Data Types" revision=""/>
\ No newline at end of file
diff --git a/data_model/clusters/EVSE-Definitions.xml b/data_model/clusters/EVSE-Definitions.xml
deleted file mode 100644
index 7ff6135..0000000
--- a/data_model/clusters/EVSE-Definitions.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--

-Electric Vehicle Supply Equipment (EVSE) is equipment used to charge an Electric

-Vehicle (EV) or Plug-In Hybrid Electric Vehicle. This cluster provides an

-interface to the functionality of Electric Vehicle Supply Equipment (EVSE)

-management.

-

-Devices targeted by this cluster include Electric Vehicle Supply Equipment

-(EVSE). The cluster generically assumes a signaling protocol (J1772 in NA and

-IEC61851 in Europe and Asia) between the EVSE and Electric Vehicle (EV) that

-utilizes a pilot signal to manage the states of the charge. SAE J1772 and

-IEC61841 define Pilot signal as a modulated DC voltage on a single wire.

-

-Power Line Communication (PLC) is supported by some EVSEs (e.g. for support of

-ISO 15118) and may enable features such as Vehicle to Grid (V2G) or Vehicle to

-Home (V2H) that allows for bi-directional charging/discharging of electric

-vehicles.

-

-More modern EVSE devices may optionally support ISO 15118 to support

-bi-directional charging (Vehicle to Grid - V2G) and Plug and Charge

-capabilities.

-

-This cluster definition assumes AC charging only. DC charging options may be

-added in future revisions of this cluster.

-

-This cluster supports a safety mechanism that may lockout remote operation until

-the initial latching conditions have been met. Some of the fault conditions

-defined in SAE J1772, such as Ground-Fault Circuit Interrupter (GFCI) or

-Charging Circuit Interrupting Device (CCID), may require clearing by an operator

-by, for example, pressing a button on the equipment or breaker panel.

-

-Signals and data provided by Electric Vehicle (EV) are labeled using EV in

-control and attribute names. Signals and data provided by Electric Vehicle

-Supply Equipment (EVSE) are labeled using EVSE in control and attribute names.

-

-This EVSE cluster is written around support of a single EVSE. Having multiple

-EVSEs at home or a business is managed by backend system and outside scope of

-this cluster.

-

-Note that in many deployments the EVSE may be outside the home and may suffer

-from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows

-for a charging profile to be pre-configured, in case there is a temporary

-communications loss during a charging session.

--->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Definitions" revision=""/>
\ No newline at end of file
diff --git a/data_model/clusters/EVSE-Dependencies.xml b/data_model/clusters/EVSE-Dependencies.xml
deleted file mode 100644
index a87cb67..0000000
--- a/data_model/clusters/EVSE-Dependencies.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--

-Electric Vehicle Supply Equipment (EVSE) is equipment used to charge an Electric

-Vehicle (EV) or Plug-In Hybrid Electric Vehicle. This cluster provides an

-interface to the functionality of Electric Vehicle Supply Equipment (EVSE)

-management.

-

-Devices targeted by this cluster include Electric Vehicle Supply Equipment

-(EVSE). The cluster generically assumes a signaling protocol (J1772 in NA and

-IEC61851 in Europe and Asia) between the EVSE and Electric Vehicle (EV) that

-utilizes a pilot signal to manage the states of the charge. SAE J1772 and

-IEC61841 define Pilot signal as a modulated DC voltage on a single wire.

-

-Power Line Communication (PLC) is supported by some EVSEs (e.g. for support of

-ISO 15118) and may enable features such as Vehicle to Grid (V2G) or Vehicle to

-Home (V2H) that allows for bi-directional charging/discharging of electric

-vehicles.

-

-More modern EVSE devices may optionally support ISO 15118 to support

-bi-directional charging (Vehicle to Grid - V2G) and Plug and Charge

-capabilities.

-

-This cluster definition assumes AC charging only. DC charging options may be

-added in future revisions of this cluster.

-

-This cluster supports a safety mechanism that may lockout remote operation until

-the initial latching conditions have been met. Some of the fault conditions

-defined in SAE J1772, such as Ground-Fault Circuit Interrupter (GFCI) or

-Charging Circuit Interrupting Device (CCID), may require clearing by an operator

-by, for example, pressing a button on the equipment or breaker panel.

-

-Signals and data provided by Electric Vehicle (EV) are labeled using EV in

-control and attribute names. Signals and data provided by Electric Vehicle

-Supply Equipment (EVSE) are labeled using EVSE in control and attribute names.

-

-This EVSE cluster is written around support of a single EVSE. Having multiple

-EVSEs at home or a business is managed by backend system and outside scope of

-this cluster.

-

-Note that in many deployments the EVSE may be outside the home and may suffer

-from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows

-for a charging profile to be pre-configured, in case there is a temporary

-communications loss during a charging session.

--->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Dependencies" revision=""/>
\ No newline at end of file
diff --git a/data_model/clusters/EVSE-Events.xml b/data_model/clusters/EVSE-Events.xml
deleted file mode 100644
index 5140177..0000000
--- a/data_model/clusters/EVSE-Events.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--

-Electric Vehicle Supply Equipment (EVSE) is equipment used to charge an Electric

-Vehicle (EV) or Plug-In Hybrid Electric Vehicle. This cluster provides an

-interface to the functionality of Electric Vehicle Supply Equipment (EVSE)

-management.

-

-Devices targeted by this cluster include Electric Vehicle Supply Equipment

-(EVSE). The cluster generically assumes a signaling protocol (J1772 in NA and

-IEC61851 in Europe and Asia) between the EVSE and Electric Vehicle (EV) that

-utilizes a pilot signal to manage the states of the charge. SAE J1772 and

-IEC61841 define Pilot signal as a modulated DC voltage on a single wire.

-

-Power Line Communication (PLC) is supported by some EVSEs (e.g. for support of

-ISO 15118) and may enable features such as Vehicle to Grid (V2G) or Vehicle to

-Home (V2H) that allows for bi-directional charging/discharging of electric

-vehicles.

-

-More modern EVSE devices may optionally support ISO 15118 to support

-bi-directional charging (Vehicle to Grid - V2G) and Plug and Charge

-capabilities.

-

-This cluster definition assumes AC charging only. DC charging options may be

-added in future revisions of this cluster.

-

-This cluster supports a safety mechanism that may lockout remote operation until

-the initial latching conditions have been met. Some of the fault conditions

-defined in SAE J1772, such as Ground-Fault Circuit Interrupter (GFCI) or

-Charging Circuit Interrupting Device (CCID), may require clearing by an operator

-by, for example, pressing a button on the equipment or breaker panel.

-

-Signals and data provided by Electric Vehicle (EV) are labeled using EV in

-control and attribute names. Signals and data provided by Electric Vehicle

-Supply Equipment (EVSE) are labeled using EVSE in control and attribute names.

-

-This EVSE cluster is written around support of a single EVSE. Having multiple

-EVSEs at home or a business is managed by backend system and outside scope of

-this cluster.

-

-Note that in many deployments the EVSE may be outside the home and may suffer

-from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows

-for a charging profile to be pre-configured, in case there is a temporary

-communications loss during a charging session.

--->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Events" revision=""/>
\ No newline at end of file
diff --git a/data_model/clusters/EVSE-Features.xml b/data_model/clusters/EVSE-Features.xml
deleted file mode 100644
index a8b48a5..0000000
--- a/data_model/clusters/EVSE-Features.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--

-Electric Vehicle Supply Equipment (EVSE) is equipment used to charge an Electric

-Vehicle (EV) or Plug-In Hybrid Electric Vehicle. This cluster provides an

-interface to the functionality of Electric Vehicle Supply Equipment (EVSE)

-management.

-

-Devices targeted by this cluster include Electric Vehicle Supply Equipment

-(EVSE). The cluster generically assumes a signaling protocol (J1772 in NA and

-IEC61851 in Europe and Asia) between the EVSE and Electric Vehicle (EV) that

-utilizes a pilot signal to manage the states of the charge. SAE J1772 and

-IEC61841 define Pilot signal as a modulated DC voltage on a single wire.

-

-Power Line Communication (PLC) is supported by some EVSEs (e.g. for support of

-ISO 15118) and may enable features such as Vehicle to Grid (V2G) or Vehicle to

-Home (V2H) that allows for bi-directional charging/discharging of electric

-vehicles.

-

-More modern EVSE devices may optionally support ISO 15118 to support

-bi-directional charging (Vehicle to Grid - V2G) and Plug and Charge

-capabilities.

-

-This cluster definition assumes AC charging only. DC charging options may be

-added in future revisions of this cluster.

-

-This cluster supports a safety mechanism that may lockout remote operation until

-the initial latching conditions have been met. Some of the fault conditions

-defined in SAE J1772, such as Ground-Fault Circuit Interrupter (GFCI) or

-Charging Circuit Interrupting Device (CCID), may require clearing by an operator

-by, for example, pressing a button on the equipment or breaker panel.

-

-Signals and data provided by Electric Vehicle (EV) are labeled using EV in

-control and attribute names. Signals and data provided by Electric Vehicle

-Supply Equipment (EVSE) are labeled using EVSE in control and attribute names.

-

-This EVSE cluster is written around support of a single EVSE. Having multiple

-EVSEs at home or a business is managed by backend system and outside scope of

-this cluster.

-

-Note that in many deployments the EVSE may be outside the home and may suffer

-from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows

-for a charging profile to be pre-configured, in case there is a temporary

-communications loss during a charging session.

--->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Features" revision=""/>
\ No newline at end of file
diff --git a/data_model/clusters/EVSE-RevisionHistory.xml b/data_model/clusters/EVSE-RevisionHistory.xml
deleted file mode 100644
index 89ca30f..0000000
--- a/data_model/clusters/EVSE-RevisionHistory.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--

-Electric Vehicle Supply Equipment (EVSE) is equipment used to charge an Electric

-Vehicle (EV) or Plug-In Hybrid Electric Vehicle. This cluster provides an

-interface to the functionality of Electric Vehicle Supply Equipment (EVSE)

-management.

-

-Devices targeted by this cluster include Electric Vehicle Supply Equipment

-(EVSE). The cluster generically assumes a signaling protocol (J1772 in NA and

-IEC61851 in Europe and Asia) between the EVSE and Electric Vehicle (EV) that

-utilizes a pilot signal to manage the states of the charge. SAE J1772 and

-IEC61841 define Pilot signal as a modulated DC voltage on a single wire.

-

-Power Line Communication (PLC) is supported by some EVSEs (e.g. for support of

-ISO 15118) and may enable features such as Vehicle to Grid (V2G) or Vehicle to

-Home (V2H) that allows for bi-directional charging/discharging of electric

-vehicles.

-

-More modern EVSE devices may optionally support ISO 15118 to support

-bi-directional charging (Vehicle to Grid - V2G) and Plug and Charge

-capabilities.

-

-This cluster definition assumes AC charging only. DC charging options may be

-added in future revisions of this cluster.

-

-This cluster supports a safety mechanism that may lockout remote operation until

-the initial latching conditions have been met. Some of the fault conditions

-defined in SAE J1772, such as Ground-Fault Circuit Interrupter (GFCI) or

-Charging Circuit Interrupting Device (CCID), may require clearing by an operator

-by, for example, pressing a button on the equipment or breaker panel.

-

-Signals and data provided by Electric Vehicle (EV) are labeled using EV in

-control and attribute names. Signals and data provided by Electric Vehicle

-Supply Equipment (EVSE) are labeled using EVSE in control and attribute names.

-

-This EVSE cluster is written around support of a single EVSE. Having multiple

-EVSEs at home or a business is managed by backend system and outside scope of

-this cluster.

-

-Note that in many deployments the EVSE may be outside the home and may suffer

-from intermittent network connections (e.g. a weak Wi-Fi signal). It also allows

-for a charging profile to be pre-configured, in case there is a temporary

-communications loss during a charging session.

--->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Revision History" revision=""/>
\ No newline at end of file
diff --git a/data_model/clusters/ElectricalEnergyMeasurement.xml b/data_model/clusters/ElectricalEnergyMeasurement.xml
index c6bf8e7..9802076 100644
--- a/data_model/clusters/ElectricalEnergyMeasurement.xml
+++ b/data_model/clusters/ElectricalEnergyMeasurement.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0091" name="Electrical Energy Measurement" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0091" name="Electrical Energy Measurement"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="EEM" scope="Endpoint"/>
   <features>
     <feature bit="0" code="IMPE" name="ImportedEnergy" summary="Measurement of energy imported by the server">
@@ -74,7 +79,59 @@
       <optionalConform choice="b" more="true"/>
     </feature>
   </features>
-  <dataTypes/>
+  <dataTypes>
+    <struct name="CumulativeEnergyResetStruct">
+      <field id="0" name="ImportedResetTimestamp" type="epoch-s" default="null">
+        <access read="true"/>
+        <quality nullable="true"/>
+        <optionalConform>
+          <feature name="IMPE"/>
+        </optionalConform>
+      </field>
+      <field id="1" name="ExportedResetTimestamp" type="epoch-s" default="null">
+        <access read="true"/>
+        <quality nullable="true"/>
+        <optionalConform>
+          <feature name="EXPE"/>
+        </optionalConform>
+      </field>
+      <field id="2" name="ImportedResetSystime" type="systime-ms" default="null">
+        <access read="true"/>
+        <quality nullable="true"/>
+        <optionalConform>
+          <feature name="IMPE"/>
+        </optionalConform>
+      </field>
+      <field id="3" name="ExportedResetSystime" type="systime-ms" default="null">
+        <access read="true"/>
+        <quality nullable="true"/>
+        <optionalConform>
+          <feature name="EXPE"/>
+        </optionalConform>
+      </field>
+    </struct>
+    <struct name="EnergyMeasurementStruct">
+      <field id="0" name="Energy" type="energy-mWh">
+        <access read="true"/>
+        <mandatoryConform/>
+        <constraint type="between" from="0" to="2"/>
+      </field>
+      <field id="1" name="StartTimestamp" type="epoch-s">
+        <access read="true"/>
+      </field>
+      <field id="2" name="EndTimestamp" type="epoch-s">
+        <access read="true"/>
+        <constraint type="min" value="StartTimestamp+1"/>
+      </field>
+      <field id="3" name="StartSystime" type="systime-ms">
+        <access read="true"/>
+      </field>
+      <field id="4" name="EndSystime" type="systime-ms">
+        <access read="true"/>
+        <constraint type="min" value="StartSystime+1"/>
+      </field>
+    </struct>
+  </dataTypes>
   <attributes>
     <attribute id="0x0000" name="Accuracy" type="ref_MeasurementAccuracyStruct">
       <access read="true" readPrivilege="view"/>
diff --git a/data_model/clusters/ElectricalPowerMeasurement.xml b/data_model/clusters/ElectricalPowerMeasurement.xml
index aa5baea..c695e8d 100644
--- a/data_model/clusters/ElectricalPowerMeasurement.xml
+++ b/data_model/clusters/ElectricalPowerMeasurement.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0090" name="Electrical Power Measurement" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0090" name="Electrical Power Measurement"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="EPM" scope="Endpoint"/>
   <features>
     <feature bit="0" code="DIRC" name="DirectCurrent" summary="Supports measurement of direct current">
@@ -95,6 +100,68 @@
         <mandatoryConform/>
       </item>
     </enum>
+    <struct name="HarmonicMeasurementStruct">
+      <field id="0" name="Order" type="uint8" default="1">
+        <mandatoryConform/>
+        <constraint type="min" value="1"/>
+      </field>
+      <field id="1" name="Measurement" type="int64" default="null">
+        <quality nullable="true"/>
+        <mandatoryConform/>
+        <constraint type="between" from="-2" to="2"/>
+      </field>
+    </struct>
+    <struct name="MeasurementRangeStruct">
+      <field id="0" name="MeasurementType" type="ref_MeasurementTypeEnum">
+        <mandatoryConform/>
+      </field>
+      <field id="1" name="Min" type="int64">
+        <mandatoryConform/>
+        <constraint type="between" from="-2" to="2"/>
+      </field>
+      <field id="2" name="Max" type="int64">
+        <mandatoryConform/>
+        <constraint type="between" from="-2" to="2"/>
+      </field>
+      <field id="3" name="StartTimestamp" type="epoch-s">
+        <mandatoryConform>
+          <attribute name="EndTimestamp"/>
+        </mandatoryConform>
+      </field>
+      <field id="4" name="EndTimestamp" type="epoch-s">
+        <constraint type="min" value="StartTimestamp+1"/>
+      </field>
+      <field id="5" name="MinTimestamp" type="epoch-s">
+        <mandatoryConform>
+          <attribute name="EndTimestamp"/>
+        </mandatoryConform>
+      </field>
+      <field id="6" name="MaxTimestamp" type="epoch-s">
+        <mandatoryConform>
+          <attribute name="EndTimestamp"/>
+        </mandatoryConform>
+        <constraint type="min" value="MinTimestamp+1"/>
+      </field>
+      <field id="7" name="StartSystime" type="systime-ms">
+        <mandatoryConform>
+          <attribute name="EndSystime"/>
+        </mandatoryConform>
+      </field>
+      <field id="8" name="EndSystime" type="systime-ms">
+        <constraint type="min" value="StartSystime+1"/>
+      </field>
+      <field id="9" name="MinSystime" type="systime-ms">
+        <mandatoryConform>
+          <attribute name="EndSystime"/>
+        </mandatoryConform>
+      </field>
+      <field id="10" name="MaxSystime" type="systime-ms">
+        <mandatoryConform>
+          <attribute name="EndSystime"/>
+        </mandatoryConform>
+        <constraint type="min" value="MinSystime+1"/>
+      </field>
+    </struct>
   </dataTypes>
   <attributes>
     <attribute id="0x0000" name="PowerMode" type="PowerModeEnum">
diff --git a/data_model/clusters/EnergyCalendar.xml b/data_model/clusters/EnergyCalendar.xml
index a21845d..8d3f1b3 100644
--- a/data_model/clusters/EnergyCalendar.xml
+++ b/data_model/clusters/EnergyCalendar.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: short

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x009A" name="Energy Calendar" revision="3">
   <revisionHistory>
@@ -61,6 +63,9 @@
     <revision revision="2" summary="CCB 3042"/>
     <revision revision="3" summary="Initial Matter Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x009A" name="Energy Calendar"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="SECA" scope="Endpoint"/>
   <features>
     <feature bit="0" code="PTIER" name="PricingTier" summary="Supports information about pricing tiers">
diff --git a/data_model/clusters/EnergyEVSE.xml b/data_model/clusters/EnergyEVSE.xml
index f59d418..fa15692 100644
--- a/data_model/clusters/EnergyEVSE.xml
+++ b/data_model/clusters/EnergyEVSE.xml
@@ -54,12 +54,17 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0099" name="Energy EVSE" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
     <revision revision="2" summary="Updates after 0.7 Ballot review"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0099" name="Energy EVSE"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="EEVSE" scope="Endpoint"/>
   <features>
     <feature bit="0" code="PREF" name="ChargingPreferences" summary="EVSE supports storing user charging preferences">
@@ -395,7 +400,6 @@
   </attributes>
   <commands>
     <command id="0x00" name="GetTargetsResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="PREF"/>
       </mandatoryConform>
@@ -405,11 +409,11 @@
         <constraint type="maxCount" value="7"/>
       </field>
     </command>
-    <command id="0x01" name="Disable" response="Y">
+    <command id="0x01" name="Disable" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" timed="true"/>
       <mandatoryConform/>
     </command>
-    <command id="0x02" name="EnableCharging" response="Y">
+    <command id="0x02" name="EnableCharging" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" timed="true"/>
       <mandatoryConform/>
       <field id="0" name="ChargingEnabledUntil" type="epoch-s" default="null">
@@ -425,7 +429,7 @@
         <constraint type="min" value="0"/>
       </field>
     </command>
-    <command id="0x03" name="EnableDischarging" response="Y">
+    <command id="0x03" name="EnableDischarging" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" timed="true"/>
       <mandatoryConform>
         <feature name="V2X"/>
@@ -439,11 +443,11 @@
         <constraint type="min" value="0"/>
       </field>
     </command>
-    <command id="0x04" name="StartDiagnostics" response="Y">
+    <command id="0x04" name="StartDiagnostics" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" timed="true"/>
       <optionalConform/>
     </command>
-    <command id="0x05" name="SetTargets" response="Y">
+    <command id="0x05" name="SetTargets" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" timed="true"/>
       <mandatoryConform>
         <feature name="PREF"/>
@@ -454,13 +458,13 @@
         <constraint type="maxCount" value="7"/>
       </field>
     </command>
-    <command id="0x06" name="GetTargets" response="GetTargetsResponse">
+    <command id="0x06" name="GetTargets" direction="commandToServer" response="GetTargetsResponse">
       <access invokePrivilege="operate" timed="true"/>
       <mandatoryConform>
         <feature name="PREF"/>
       </mandatoryConform>
     </command>
-    <command id="0x07" name="ClearTargets" response="Y">
+    <command id="0x07" name="ClearTargets" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" timed="true"/>
       <mandatoryConform>
         <feature name="PREF"/>
diff --git a/data_model/clusters/EnergyPreference.xml b/data_model/clusters/EnergyPreference.xml
index 7156be8..c367652 100644
--- a/data_model/clusters/EnergyPreference.xml
+++ b/data_model/clusters/EnergyPreference.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x009B" name="Energy Preference" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x009B" name="Energy Preference"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="EPREF" scope="Endpoint"/>
   <features>
     <feature bit="0" code="BALA" name="EnergyBalance" summary="Device can balance energy consumption vs. another priority">
diff --git a/data_model/clusters/EnergyPrice.xml b/data_model/clusters/EnergyPrice.xml
index 23072a6..1683fe1 100644
--- a/data_model/clusters/EnergyPrice.xml
+++ b/data_model/clusters/EnergyPrice.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: short

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0095" name="Energy Price" revision="4">
   <revisionHistory>
@@ -62,6 +64,9 @@
     <revision revision="3" summary="CCBs 2043 2706 2810 2912 3566"/>
     <revision revision="4" summary="Initial Matter Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0095" name="Energy Price"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="SEPR" scope="Endpoint"/>
   <features>
     <feature bit="0" code="FORE" name="Forecasting" summary="Forecasts upcoming pricing">
@@ -173,7 +178,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="GetDetailedPriceRequest" response="GetDetailedPriceResponse">
+    <command id="0x00" name="GetDetailedPriceRequest" direction="commandToServer" response="GetDetailedPriceResponse">
       <access invokePrivilege="operate"/>
       <optionalConform/>
       <field id="0" name="Details" type="PriceDetailBitmap" default="0">
@@ -188,7 +193,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x02" name="GetDetailedForecastRequest" response="GetDetailedForecastResponse">
+    <command id="0x02" name="GetDetailedForecastRequest" direction="commandToServer" response="GetDetailedForecastResponse">
       <access invokePrivilege="operate"/>
       <optionalConform>
         <feature name="FORE"/>
diff --git a/data_model/clusters/FanControl.xml b/data_model/clusters/FanControl.xml
index acf1d59..756a7bd 100644
--- a/data_model/clusters/FanControl.xml
+++ b/data_model/clusters/FanControl.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: short

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0202" name="Fan Control" revision="4">
   <revisionHistory>
@@ -62,6 +64,9 @@
     <revision revision="3" summary="Addition of AirflowDirection and Step command"/>
     <revision revision="4" summary="Change conformance for FanModeSequenceEnum"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0202" name="Fan Control"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="FAN" scope="Endpoint"/>
   <features>
     <feature bit="0" code="SPD" name="MultiSpeed" summary="0-SpeedMax Fan Speeds">
@@ -277,7 +282,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="Step" response="Y">
+    <command id="0x00" name="Step" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="STEP"/>
diff --git a/data_model/clusters/FlowMeasurement.xml b/data_model/clusters/FlowMeasurement.xml
index 66ad022..29f9d9d 100644
--- a/data_model/clusters/FlowMeasurement.xml
+++ b/data_model/clusters/FlowMeasurement.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0404" name="Flow Measurement" revision="3">
   <revisionHistory>
@@ -61,6 +63,9 @@
     <revision revision="2" summary="CCB 2241 2370"/>
     <revision revision="3" summary="New data model format and notation"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0404" name="Flow Measurement"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="FLW" scope="Endpoint"/>
   <attributes>
     <attribute id="0x0000" name="MeasuredValue" type="uint16" default="null">
diff --git a/data_model/clusters/GeneralCommissioningCluster.xml b/data_model/clusters/GeneralCommissioningCluster.xml
index a25cdfc..635a663 100644
--- a/data_model/clusters/GeneralCommissioningCluster.xml
+++ b/data_model/clusters/GeneralCommissioningCluster.xml
@@ -1,7 +1,5 @@
 <?xml version="1.0"?>
 <!--

-link:../matter-defines.adoc[]

-

 Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.

 The information within this document is the property of the Connectivity

 Standards Alliance and its use and disclosure are restricted, except as

@@ -61,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0030" name="General Commissioning"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="CGEN" scope="Node"/>
   <dataTypes>
     <enum name="CommissioningErrorEnum">
diff --git a/data_model/clusters/Group-Key-Management-Cluster.xml b/data_model/clusters/Group-Key-Management-Cluster.xml
index 43e7a39..8867a39 100644
--- a/data_model/clusters/Group-Key-Management-Cluster.xml
+++ b/data_model/clusters/Group-Key-Management-Cluster.xml
@@ -55,11 +55,14 @@
 508 Second Street, Suite 206

 Davis, CA 95616, USA

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x003F" name="GroupKeyManagement" revision="2">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x003F" name="Group Key Management" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
     <revision revision="2" summary="Clarify KeySetWrite validation and behavior on invalid epoch key lengths"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x003F" name="GroupKeyManagement"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="GRPKEY" scope="Node"/>
   <features>
     <feature bit="0" code="CS" name="CacheAndSync" summary="The ability to support CacheAndSync security policy and MCSP.">
@@ -86,21 +89,22 @@
       </item>
     </enum>
     <struct name="GroupInfoMapStruct">
-      <field id="1" name="GroupId" type="ref_DataTypeGroupId">
+      <field id="1" name="GroupId" type="group-id">
         <mandatoryConform/>
       </field>
-      <field id="2" name="Endpoints" type="ref_DataTypeList[ref_DataTypeEndpointNumber]">
+      <field id="2" name="Endpoints" type="list">
+        <entry type="endpoint-no"/>
         <mandatoryConform/>
-        <constraint type="min" value="1"/>
+        <constraint type="minCount" value="1"/>
       </field>
-      <field id="3" name="GroupName" type="ref_DataTypeString">
+      <field id="3" name="GroupName" type="string">
         <optionalConform/>
-        <constraint type="max" value="16"/>
+        <constraint type="maxLength" value="16"/>
       </field>
       <access fabricScoped="true"/>
     </struct>
     <struct name="GroupKeyMapStruct">
-      <field id="1" name="GroupId" type="ref_DataTypeGroupId">
+      <field id="1" name="GroupId" type="group-id">
         <mandatoryConform/>
       </field>
       <field id="2" name="GroupKeySetID" type="uint16">
@@ -117,35 +121,35 @@
         <access fabricSensitive="true"/>
         <mandatoryConform/>
       </field>
-      <field id="2" name="EpochKey0" type="ref_DataTypeOctstr">
+      <field id="2" name="EpochKey0" type="octstr">
         <access fabricSensitive="true"/>
         <quality nullable="true"/>
         <mandatoryConform/>
-        <constraint type="allowed" value="16"/>
+        <constraint type="maxLength" value="16"/>
       </field>
-      <field id="3" name="EpochStartTime0" type="ref_DataTypeEpochUs">
+      <field id="3" name="EpochStartTime0" type="epoch-us">
         <access fabricSensitive="true"/>
         <quality nullable="true"/>
         <mandatoryConform/>
       </field>
-      <field id="4" name="EpochKey1" type="ref_DataTypeOctstr">
+      <field id="4" name="EpochKey1" type="octstr">
         <access fabricSensitive="true"/>
         <quality nullable="true"/>
         <mandatoryConform/>
-        <constraint type="allowed" value="16"/>
+        <constraint type="maxLength" value="16"/>
       </field>
-      <field id="5" name="EpochStartTime1" type="ref_DataTypeEpochUs">
+      <field id="5" name="EpochStartTime1" type="epoch-us">
         <access fabricSensitive="true"/>
         <quality nullable="true"/>
         <mandatoryConform/>
       </field>
-      <field id="6" name="EpochKey2" type="ref_DataTypeOctstr">
+      <field id="6" name="EpochKey2" type="octstr">
         <access fabricSensitive="true"/>
         <quality nullable="true"/>
         <mandatoryConform/>
-        <constraint type="allowed" value="16"/>
+        <constraint type="maxLength" value="16"/>
       </field>
-      <field id="7" name="EpochStartTime2" type="ref_DataTypeEpochUs">
+      <field id="7" name="EpochStartTime2" type="epoch-us">
         <access fabricSensitive="true"/>
         <quality nullable="true"/>
         <mandatoryConform/>
@@ -160,13 +164,15 @@
     </struct>
   </dataTypes>
   <attributes>
-    <attribute id="0x0000" name="GroupKeyMap" type="ref_DataTypeList[GroupKeyMapStruct Type]" default="empty">
+    <attribute id="0x0000" name="GroupKeyMap" type="list" default="empty">
+      <entry type="GroupKeyMapStruct"/>
       <access read="true" write="true" readPrivilege="view" writePrivilege="manage" fabricScoped="true"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
       <mandatoryConform/>
       <constraint type="desc"/>
     </attribute>
-    <attribute id="0x0001" name="GroupTable" type="ref_DataTypeList[GroupInfoMapStruct Type]" default="empty">
+    <attribute id="0x0001" name="GroupTable" type="list" default="empty">
+      <entry type="GroupInfoMapStruct"/>
       <access read="true" readPrivilege="view" fabricScoped="true"/>
       <mandatoryConform/>
       <constraint type="desc"/>
@@ -184,14 +190,14 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="KeySetWrite Command" response="Y">
+    <command id="0x00" name="KeySetWrite Command" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupKeySet" type="GroupKeySetStruct">
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x01" name="KeySetRead Command" response="KeySetReadResponse Command">
+    <command id="0x01" name="KeySetRead Command" direction="commandToServer" response="KeySetReadResponse Command">
       <access invokePrivilege="admin" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupKeySetID" type="uint16">
@@ -199,20 +205,19 @@
       </field>
     </command>
     <command id="0x02" name="KeySetReadResponse Command" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="GroupKeySet" type="GroupKeySetStruct">
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x03" name="KeySetRemove Command" response="Y">
+    <command id="0x03" name="KeySetRemove Command" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupKeySetID" type="uint16">
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x04" name="KeySetReadAllIndices Command" response="KeySetReadAllIndicesResponse Command">
+    <command id="0x04" name="KeySetReadAllIndices Command" direction="commandToServer" response="KeySetReadAllIndicesResponse Command">
       <access invokePrivilege="admin" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="reserved">
@@ -220,7 +225,6 @@
       </field>
     </command>
     <command id="0x05" name="KeySetReadAllIndicesResponse Command" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="GroupKeySetIDs" type="list">
         <entry type="uint16"/>
diff --git a/data_model/clusters/Groups.xml b/data_model/clusters/Groups.xml
index 175c9ca..72902e8 100644
--- a/data_model/clusters/Groups.xml
+++ b/data_model/clusters/Groups.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0004" name="Groups" revision="4">
   <revisionHistory>
@@ -62,6 +64,9 @@
     <revision revision="3" summary="CCB 2310 2704"/>
     <revision revision="4" summary="New data model format and notation"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0004" name="Groups"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="G" scope="Endpoint"/>
   <features>
     <feature bit="0" code="GN" name="GroupNames" summary="The ability to store a name for a group.">
@@ -84,7 +89,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="AddGroup" response="AddGroupResponse">
+    <command id="0x00" name="AddGroup" direction="commandToServer" response="AddGroupResponse">
       <access invokePrivilege="manage" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupID" type="group-id">
@@ -97,7 +102,6 @@
       </field>
     </command>
     <command id="0x00" name="AddGroupResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="enum8">
         <mandatoryConform/>
@@ -108,7 +112,7 @@
         <constraint type="min" value="1"/>
       </field>
     </command>
-    <command id="0x01" name="ViewGroup" response="ViewGroupResponse">
+    <command id="0x01" name="ViewGroup" direction="commandToServer" response="ViewGroupResponse">
       <access invokePrivilege="operate" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupID" type="group-id">
@@ -117,7 +121,6 @@
       </field>
     </command>
     <command id="0x01" name="ViewGroupResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="enum8">
         <mandatoryConform/>
@@ -132,7 +135,7 @@
         <constraint type="maxLength" value="16"/>
       </field>
     </command>
-    <command id="0x02" name="GetGroupMembership" response="GetGroupMembershipResponse">
+    <command id="0x02" name="GetGroupMembership" direction="commandToServer" response="GetGroupMembershipResponse">
       <access invokePrivilege="operate" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupList" type="list">
@@ -143,7 +146,6 @@
       </field>
     </command>
     <command id="0x02" name="GetGroupMembershipResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Capacity" type="uint8">
         <quality nullable="true"/>
@@ -156,7 +158,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x03" name="RemoveGroup" response="RemoveGroupResponse">
+    <command id="0x03" name="RemoveGroup" direction="commandToServer" response="RemoveGroupResponse">
       <access invokePrivilege="manage" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupID" type="group-id">
@@ -165,7 +167,6 @@
       </field>
     </command>
     <command id="0x03" name="RemoveGroupResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="enum8">
         <mandatoryConform/>
@@ -176,11 +177,11 @@
         <constraint type="min" value="1"/>
       </field>
     </command>
-    <command id="0x04" name="RemoveAllGroups" response="Y">
+    <command id="0x04" name="RemoveAllGroups" direction="commandToServer" response="Y">
       <access invokePrivilege="manage" fabricScoped="true"/>
       <mandatoryConform/>
     </command>
-    <command id="0x05" name="AddGroupIfIdentifying" response="Y">
+    <command id="0x05" name="AddGroupIfIdentifying" direction="commandToServer" response="Y">
       <access invokePrivilege="manage" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupID" type="group-id">
diff --git a/data_model/clusters/ICDManagement.xml b/data_model/clusters/ICDManagement.xml
index 3cc6c9b..2a770a4 100644
--- a/data_model/clusters/ICDManagement.xml
+++ b/data_model/clusters/ICDManagement.xml
@@ -54,21 +54,41 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+// Update Name

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0046" name="ICDManagement" revision="1">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0046" name="ICD Management" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
+    <revision revision="2" summary="Addition of LIT ICD support, UserActiveModeTrigger, ActiveModeDuration, StayActiveResponse; removal of field Key in MonitoringRegistrationStruct"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0046" name="ICDManagement"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="ICDM" scope="Node"/>
   <features>
     <feature bit="0" code="CIP" name="CheckInProtocolSupport" summary="Device supports attributes and commands for the Check-In Protocol support.">
       <otherwiseConform>
-        <provisionalConform/>
+        <mandatoryConform>
+          <feature name="LITS"/>
+        </mandatoryConform>
         <optionalConform/>
       </otherwiseConform>
     </feature>
+    <feature bit="1" code="UAT" name="UserActiveModeTrigger" summary="Device supports the user active mode trigger feature.">
+      <otherwiseConform>
+        <mandatoryConform>
+          <feature name="LITS"/>
+        </mandatoryConform>
+        <optionalConform/>
+      </otherwiseConform>
+    </feature>
+    <feature bit="2" code="LITS" name="LongIdleTimeSupport" summary="Device supports operating as a Long Idle Time ICD.">
+      <optionalConform/>
+    </feature>
   </features>
   <dataTypes>
+    <number name="UserActiveModeTriggerBitmap" type=""/>
     <enum name="OperatingModeEnum">
       <item value="0" name="SIT" summary="ICD is operating as a Short Idle Time ICD.">
         <mandatoryConform/>
@@ -133,9 +153,28 @@
       </mandatoryConform>
       <constraint type="min" value="1"/>
     </attribute>
+    <attribute id="0x0006" name="UserActiveModeTriggerHint" type="UserActiveModeTriggerBitmap" default="0">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="UAT"/>
+      </mandatoryConform>
+      <constraint type="desc"/>
+    </attribute>
+    <attribute id="0x0007" name="UserActiveModeTriggerInstruction" type="string" default="&quot;">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <constraint type="maxLength" value="128"/>
+    </attribute>
+    <attribute id="0x0008" name="OperatingMode" type="OperatingModeEnum">
+      <access read="true" readPrivilege="view"/>
+      <mandatoryConform>
+        <feature name="LITS"/>
+      </mandatoryConform>
+    </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="RegisterClient" response="RegisterClientResponse">
+    <command id="0x00" name="RegisterClient" direction="commandToServer" response="RegisterClientResponse">
       <access invokePrivilege="manage" fabricScoped="true"/>
       <mandatoryConform>
         <feature name="CIP"/>
@@ -156,7 +195,6 @@
       </field>
     </command>
     <command id="0x01" name="RegisterClientResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="CIP"/>
       </mandatoryConform>
@@ -164,7 +202,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x02" name="UnregisterClient" response="Y">
+    <command id="0x02" name="UnregisterClient" direction="commandToServer" response="Y">
       <access invokePrivilege="manage" fabricScoped="true"/>
       <mandatoryConform>
         <feature name="CIP"/>
@@ -177,7 +215,7 @@
         <constraint type="maxLength" value="16"/>
       </field>
     </command>
-    <command id="0x03" name="StayActiveRequest" response="StayActiveResponse">
+    <command id="0x03" name="StayActiveRequest" direction="commandToServer" response="StayActiveResponse">
       <access invokePrivilege="operate"/>
       <otherwiseConform>
         <mandatoryConform>
@@ -190,7 +228,6 @@
       </field>
     </command>
     <command id="0x04" name="StayActiveResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <otherwiseConform>
         <mandatoryConform>
           <feature name="LITS"/>
diff --git a/data_model/clusters/Identify.xml b/data_model/clusters/Identify.xml
index 379e684..1cdc33a 100644
--- a/data_model/clusters/Identify.xml
+++ b/data_model/clusters/Identify.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0003" name="Identify" revision="4">
   <revisionHistory>
@@ -62,6 +64,9 @@
     <revision revision="3" summary="All Hubs changes"/>
     <revision revision="4" summary="New data model format and notation; add IdentifyType"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0003" name="Identify"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="I" scope="Endpoint"/>
   <dataTypes>
     <enum name="EffectIdentifierEnum">
@@ -127,14 +132,14 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="Identify" response="Y">
+    <command id="0x00" name="Identify" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform/>
       <field id="0" name="IdentifyTime" type="uint16">
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x40" name="TriggerEffect" response="Y">
+    <command id="0x40" name="TriggerEffect" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <optionalConform/>
       <field id="0" name="EffectIdentifier" type="EffectIdentifierEnum">
diff --git a/data_model/clusters/IlluminanceMeasurement.xml b/data_model/clusters/IlluminanceMeasurement.xml
index c9be9fa..c39daa0 100644
--- a/data_model/clusters/IlluminanceMeasurement.xml
+++ b/data_model/clusters/IlluminanceMeasurement.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0400" name="Illuminance Measurement" revision="3">
   <revisionHistory>
@@ -61,6 +63,9 @@
     <revision revision="2" summary="CCB 2167"/>
     <revision revision="3" summary="New data model format and notation"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0400" name="Illuminance Measurement"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="ILL" scope="Endpoint"/>
   <dataTypes>
     <enum name="LightSensorTypeEnum">
diff --git a/data_model/clusters/KeypadInput.xml b/data_model/clusters/KeypadInput.xml
index f0459e6..4cfb509 100644
--- a/data_model/clusters/KeypadInput.xml
+++ b/data_model/clusters/KeypadInput.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0509" name="Keypad Input" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0509" name="Keypad Input"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="KEYPADINPUT" scope="Endpoint"/>
   <features>
     <feature bit="0" code="NV" name="NavigationKeyCodes" summary="Supports UP, DOWN, LEFT, RIGHT, SELECT, BACK, EXIT, MENU">
@@ -345,7 +350,7 @@
     </enum>
   </dataTypes>
   <commands>
-    <command id="0x00" name="SendKey" response="SendKeyResponse">
+    <command id="0x00" name="SendKey" direction="commandToServer" response="SendKeyResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="KeyCode" type="CecKeyCodeEnum">
@@ -353,7 +358,6 @@
       </field>
     </command>
     <command id="0x01" name="SendKeyResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="StatusEnum">
         <mandatoryConform/>
diff --git a/data_model/clusters/Label-Cluster-FixedLabel.xml b/data_model/clusters/Label-Cluster-FixedLabelCluster.xml
similarity index 97%
rename from data_model/clusters/Label-Cluster-FixedLabel.xml
rename to data_model/clusters/Label-Cluster-FixedLabelCluster.xml
index 558664a..e73bfc2 100644
--- a/data_model/clusters/Label-Cluster-FixedLabel.xml
+++ b/data_model/clusters/Label-Cluster-FixedLabelCluster.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0040" name="Fixed Label" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0040" name="Fixed Label"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Label" role="utility" picsCode="FLABEL" scope="Endpoint"/>
   <dataTypes/>
   <attributes>
diff --git a/data_model/clusters/Label-Cluster-Label.xml b/data_model/clusters/Label-Cluster-LabelCluster.xml
similarity index 97%
rename from data_model/clusters/Label-Cluster-Label.xml
rename to data_model/clusters/Label-Cluster-LabelCluster.xml
index ee64da7..f107a0a 100644
--- a/data_model/clusters/Label-Cluster-Label.xml
+++ b/data_model/clusters/Label-Cluster-LabelCluster.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Label" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId name="Label"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="LABEL" scope="Endpoint"/>
   <dataTypes>
     <struct name="LabelStruct">
diff --git a/data_model/clusters/Label-Cluster-UserLabel.xml b/data_model/clusters/Label-Cluster-UserLabelCluster.xml
similarity index 97%
rename from data_model/clusters/Label-Cluster-UserLabel.xml
rename to data_model/clusters/Label-Cluster-UserLabelCluster.xml
index bca4b14..f7e809a 100644
--- a/data_model/clusters/Label-Cluster-UserLabel.xml
+++ b/data_model/clusters/Label-Cluster-UserLabelCluster.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0041" name="User Label" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0041" name="User Label"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Label" role="utility" picsCode="ULABEL" scope="Endpoint"/>
   <dataTypes/>
   <attributes>
diff --git a/data_model/clusters/LaundryDryerControls.xml b/data_model/clusters/LaundryDryerControls.xml
index 461f086..a3f7b91 100644
--- a/data_model/clusters/LaundryDryerControls.xml
+++ b/data_model/clusters/LaundryDryerControls.xml
@@ -59,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x004A" name="Laundry Dryer Controls"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="DRYERCTRL" scope="Endpoint"/>
   <dataTypes>
     <enum name="DrynessLevelEnum">
diff --git a/data_model/clusters/LaundryWasherControls.xml b/data_model/clusters/LaundryWasherControls.xml
index 5a9d108..1687984 100644
--- a/data_model/clusters/LaundryWasherControls.xml
+++ b/data_model/clusters/LaundryWasherControls.xml
@@ -59,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0053" name="Laundry Washer Controls"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="WASHERCTRL" scope="Endpoint"/>
   <features>
     <feature bit="0" code="SPIN" name="Spin" summary="Multiple spin speeds supported">
diff --git a/data_model/clusters/LevelControl.xml b/data_model/clusters/LevelControl.xml
index 8a348a2..6b2b3ca 100644
--- a/data_model/clusters/LevelControl.xml
+++ b/data_model/clusters/LevelControl.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0008" name="Level Control" revision="5">
   <revisionHistory>
@@ -65,6 +67,7 @@
     <revision revision="5" summary="New data model format and notation"/>
   </revisionHistory>
   <clusterIds>
+    <clusterId id="0x0008" name="Level Control"/>
     <clusterId id="0x001C" name="Pulse Width Modulation"/>
   </clusterIds>
   <classification hierarchy="base" role="application" picsCode="LVL" scope="Endpoint"/>
@@ -210,7 +213,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="MoveToLevel" response="Y">
+    <command id="0x00" name="MoveToLevel" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Level" type="uint8">
@@ -230,7 +233,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x01" name="Move" response="Y">
+    <command id="0x01" name="Move" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="MoveMode" type="MoveModeEnum">
@@ -250,7 +253,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x02" name="Step" response="Y">
+    <command id="0x02" name="Step" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="StepMode" type="StepModeEnum">
@@ -273,7 +276,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x03" name="Stop" response="Y">
+    <command id="0x03" name="Stop" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="OptionsMask" type="OptionsBitmap" default="0">
@@ -285,23 +288,23 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x04" name="MoveToLevelWithOnOff" response="Y">
+    <command id="0x04" name="MoveToLevelWithOnOff" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
-    <command id="0x05" name="MoveWithOnOff" response="Y">
+    <command id="0x05" name="MoveWithOnOff" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
-    <command id="0x06" name="StepWithOnOff" response="Y">
+    <command id="0x06" name="StepWithOnOff" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
-    <command id="0x07" name="StopWithOnOff" response="Y">
+    <command id="0x07" name="StopWithOnOff" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
-    <command id="0x08" name="MoveToClosestFrequency" response="Y">
+    <command id="0x08" name="MoveToClosestFrequency" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="FQ"/>
diff --git a/data_model/clusters/LocalizationConfiguration.xml b/data_model/clusters/LocalizationConfiguration.xml
index b264698..f3c2d5b 100644
--- a/data_model/clusters/LocalizationConfiguration.xml
+++ b/data_model/clusters/LocalizationConfiguration.xml
@@ -59,18 +59,25 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x002B" name="Localization Configuration"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="LCFG" scope="Node"/>
   <attributes>
-    <attribute id="0x0000" name="ActiveLocale" type="ref_DataTypeString" default="MS">
+    <attribute id="0x0000" name="ActiveLocale" type="string" default="MS">
       <access read="true" write="true" readPrivilege="view" writePrivilege="manage"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
       <mandatoryConform/>
-      <constraint type="max" value="35"/>
+      <constraint type="maxLength" value="35"/>
     </attribute>
-    <attribute id="0x0001" name="SupportedLocales" type="ref_DataTypeList[ref_DataTypeString]" default="MS">
+    <attribute id="0x0001" name="SupportedLocales" type="list" default="MS">
+      <entry type="string">
+        <constraint type="maxLength" value="35"/>
+      </entry>
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <mandatoryConform/>
+      <constraint type="maxCount" value="32"/>
     </attribute>
   </attributes>
 </cluster>
\ No newline at end of file
diff --git a/data_model/clusters/LocalizationTimeFormat.xml b/data_model/clusters/LocalizationTimeFormat.xml
index 204f145..fb8ceea 100644
--- a/data_model/clusters/LocalizationTimeFormat.xml
+++ b/data_model/clusters/LocalizationTimeFormat.xml
@@ -59,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x002C" name="Time Format Localization"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="LTIME" scope="Node"/>
   <features>
     <feature bit="0" code="CALFMT" name="CalendarFormat" summary="The Node can be configured to use different calendar formats when conveying values to a user.">
@@ -132,7 +135,8 @@
         <feature name="CALFMT"/>
       </mandatoryConform>
     </attribute>
-    <attribute id="0x0002" name="SupportedCalendarTypes" type="ref_DataTypeList[CalendarTypeEnum Type]" default="N/A">
+    <attribute id="0x0002" name="SupportedCalendarTypes" type="list" default="N/A">
+      <entry type="CalendarTypeEnum"/>
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <mandatoryConform>
diff --git a/data_model/clusters/LocalizationUnit.xml b/data_model/clusters/LocalizationUnit.xml
index 24c5463..be7ea6a 100644
--- a/data_model/clusters/LocalizationUnit.xml
+++ b/data_model/clusters/LocalizationUnit.xml
@@ -59,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x002D" name="Unit Localization"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="LUNIT" scope="Node"/>
   <features>
     <feature bit="0" code="TEMP" name="TemperatureUnit" summary="The Node can be configured to use different units of temperature when conveying values to a user.">
diff --git a/data_model/clusters/LowPower.xml b/data_model/clusters/LowPower.xml
index f8ee432..4c228d3 100644
--- a/data_model/clusters/LowPower.xml
+++ b/data_model/clusters/LowPower.xml
@@ -54,14 +54,19 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0508" name="Low Power" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0508" name="Low Power"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="LOWPOWER" scope="Endpoint"/>
   <commands>
-    <command id="0x00" name="Sleep" response="Y">
+    <command id="0x00" name="Sleep" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
diff --git a/data_model/clusters/MediaInput.xml b/data_model/clusters/MediaInput.xml
index 9ca0f35..b7d9d2e 100644
--- a/data_model/clusters/MediaInput.xml
+++ b/data_model/clusters/MediaInput.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0507" name="Media Input" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0507" name="Media Input"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="MEDIAINPUT" scope="Endpoint"/>
   <features>
     <feature bit="0" code="NU" name="NameUpdates" summary="Supports updates to the input names">
@@ -132,22 +137,22 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="SelectInput" response="Y">
+    <command id="0x00" name="SelectInput" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Index" type="uint8">
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x01" name="ShowInputStatus" response="Y">
+    <command id="0x01" name="ShowInputStatus" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
-    <command id="0x02" name="HideInputStatus" response="Y">
+    <command id="0x02" name="HideInputStatus" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
-    <command id="0x03" name="RenameInput" response="Y">
+    <command id="0x03" name="RenameInput" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="NU"/>
diff --git a/data_model/clusters/MediaPlayback.xml b/data_model/clusters/MediaPlayback.xml
index f2cdf5c..0a457a4 100644
--- a/data_model/clusters/MediaPlayback.xml
+++ b/data_model/clusters/MediaPlayback.xml
@@ -54,11 +54,17 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0506" name="Media Playback" revision="1">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0506" name="Media Playback" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
+    <revision revision="2" summary="Added Text/Audio tracks support, Audio-while-advancing (AA) feature, StateChanged event"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0506" name="Media Playback"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="MEDIAPLAYBACK" scope="Endpoint"/>
   <features>
     <feature bit="0" code="AS" name="AdvancedSeek" summary="Advanced media seeking">
@@ -67,8 +73,73 @@
     <feature bit="1" code="VS" name="VariableSpeed" summary="Variable speed playback">
       <optionalConform/>
     </feature>
+    <feature bit="2" code="TT" name="TextTracks" summary="Text Tracks">
+      <optionalConform/>
+    </feature>
+    <feature bit="3" code="AT" name="AudioTracks" summary="Audio Tracks">
+      <optionalConform/>
+    </feature>
+    <feature bit="4" code="AA" name="AudioAdvance" summary="Can play audio during fast and slow playback speeds">
+      <optionalConform/>
+    </feature>
   </features>
   <dataTypes>
+    <enum name="CharacteristicEnum">
+      <item value="0" name="ForcedSubtitles" summary="Textual information meant for display when no other text representation is selected. It is used to clarify dialogue, alternate languages, texted graphics or location/person IDs that are not otherwise covered in the dubbed/localized audio.">
+        <mandatoryConform/>
+      </item>
+      <item value="1" name="DescribesVideo" summary="Textual or audio media component containing a textual description (intended for audio synthesis) or an audio description describing a visual component">
+        <mandatoryConform/>
+      </item>
+      <item value="2" name="EasyToRead" summary="Simplified or reduced captions as specified in [United States Code Title 47 CFR 79.103(c)(9)].">
+        <mandatoryConform/>
+      </item>
+      <item value="3" name="FrameBased" summary="A media characteristic that indicates that a track selection option includes frame-based content.">
+        <mandatoryConform/>
+      </item>
+      <item value="4" name="MainProgram" summary="Main media component(s) which is/are intended for presentation if no other information is provided">
+        <mandatoryConform/>
+      </item>
+      <item value="5" name="OriginalContent" summary="A media characteristic that indicates that a track or media selection option contains original content.">
+        <mandatoryConform/>
+      </item>
+      <item value="6" name="VoiceOverTranslation" summary="A media characteristic that indicates that a track or media selection option contains a language translation and verbal interpretation of spoken dialog.">
+        <mandatoryConform/>
+      </item>
+      <item value="7" name="Caption" summary="Textual media component containing transcriptions of spoken dialog and auditory cues such as sound effects and music for the hearing impaired.">
+        <mandatoryConform/>
+      </item>
+      <item value="8" name="Subtitle" summary="Textual transcriptions of spoken dialog.">
+        <mandatoryConform/>
+      </item>
+      <item value="9" name="Alternate" summary="Textual media component containing transcriptions of spoken dialog and auditory cues such as sound effects and music for the hearing impaired.">
+        <mandatoryConform/>
+      </item>
+      <item value="10" name="Supplementary" summary="Media content component that is supplementary to a media content component of a different media component type.">
+        <mandatoryConform/>
+      </item>
+      <item value="11" name="Commentary" summary="Experience that contains a commentary (e.g. director’s commentary) (typically audio)">
+        <mandatoryConform/>
+      </item>
+      <item value="12" name="DubbedTranslation" summary="Experience that contains an element that is presented in a different language from the original (e.g. dubbed audio, translated captions)">
+        <mandatoryConform/>
+      </item>
+      <item value="13" name="Description" summary="Textual or audio media component containing a textual description (intended for audio synthesis) or an audio description describing a visual component">
+        <mandatoryConform/>
+      </item>
+      <item value="14" name="Metadata" summary="Media component containing information intended to be processed by application specific elements.">
+        <mandatoryConform/>
+      </item>
+      <item value="15" name="EnhancedAudioIntelligibility" summary="Experience containing an element for improved intelligibility of the dialogue.">
+        <mandatoryConform/>
+      </item>
+      <item value="16" name="Emergency" summary="Experience that provides information, about a current emergency, that is intended to enable the protection of life, health, safety, and property, and may also include critical details regarding the emergency and how to respond to the emergency.">
+        <mandatoryConform/>
+      </item>
+      <item value="17" name="Karaoke" summary="Textual representation of a songs’ lyrics, usually in the same language as the associated song as specified in [SMPTE ST 2067-2].">
+        <mandatoryConform/>
+      </item>
+    </enum>
     <enum name="PlaybackStateEnum">
       <item value="0" name="Playing" summary="Media is currently playing (includes FF and REW)">
         <mandatoryConform/>
@@ -118,6 +189,30 @@
         <mandatoryConform/>
       </field>
     </struct>
+    <struct name="TrackAttributesStruct">
+      <field id="0" name="LanguageCode" type="string">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="32"/>
+      </field>
+      <field id="1" name="Characteristics" type="list" default="null">
+        <entry type="CharacteristicEnum"/>
+        <quality nullable="true"/>
+        <optionalConform/>
+      </field>
+      <field id="2" name="DisplayName" type="string" default="null">
+        <quality nullable="true"/>
+        <optionalConform/>
+      </field>
+    </struct>
+    <struct name="TrackStruct">
+      <field id="0" name="ID" type="string">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="32"/>
+      </field>
+      <field id="1" name="TrackAttributes" type="TrackAttributesStruct">
+        <mandatoryConform/>
+      </field>
+    </struct>
   </dataTypes>
   <attributes>
     <attribute id="0x0000" name="CurrentState" type="PlaybackStateEnum">
@@ -172,52 +267,96 @@
       </mandatoryConform>
       <constraint type="desc"/>
     </attribute>
+    <attribute id="0x0007" name="ActiveAudioTrack" type="TrackStruct" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
+      <mandatoryConform>
+        <feature name="AT"/>
+      </mandatoryConform>
+      <constraint type="desc"/>
+    </attribute>
+    <attribute id="0x0008" name="AvailableAudioTracks" type="list" default="null">
+      <entry type="TrackStruct"/>
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
+      <mandatoryConform>
+        <feature name="AT"/>
+      </mandatoryConform>
+      <constraint type="desc"/>
+    </attribute>
+    <attribute id="0x0009" name="ActiveTextTrack" type="TrackStruct" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
+      <mandatoryConform>
+        <feature name="TT"/>
+      </mandatoryConform>
+      <constraint type="desc"/>
+    </attribute>
+    <attribute id="0x000A" name="AvailableTextTracks" type="list" default="null">
+      <entry type="TrackStruct"/>
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
+      <mandatoryConform>
+        <feature name="TT"/>
+      </mandatoryConform>
+      <constraint type="desc"/>
+    </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="Play" response="PlaybackResponse">
+    <command id="0x00" name="Play" direction="commandToServer" response="PlaybackResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
-    <command id="0x01" name="Pause" response="PlaybackResponse">
+    <command id="0x01" name="Pause" direction="commandToServer" response="PlaybackResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
-    <command id="0x02" name="Stop" response="PlaybackResponse">
+    <command id="0x02" name="Stop" direction="commandToServer" response="PlaybackResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
-    <command id="0x03" name="StartOver" response="PlaybackResponse">
+    <command id="0x03" name="StartOver" direction="commandToServer" response="PlaybackResponse">
       <access invokePrivilege="operate"/>
       <optionalConform/>
     </command>
-    <command id="0x04" name="Previous" response="PlaybackResponse">
+    <command id="0x04" name="Previous" direction="commandToServer" response="PlaybackResponse">
       <access invokePrivilege="operate"/>
       <optionalConform/>
     </command>
-    <command id="0x05" name="Next" response="PlaybackResponse">
+    <command id="0x05" name="Next" direction="commandToServer" response="PlaybackResponse">
       <access invokePrivilege="operate"/>
       <optionalConform/>
     </command>
-    <command id="0x06" name="Rewind" response="PlaybackResponse">
+    <command id="0x06" name="Rewind" direction="commandToServer" response="PlaybackResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="VS"/>
       </mandatoryConform>
+      <field id="0" name="AudioAdvanceUnmuted" type="bool" default="false">
+        <mandatoryConform>
+          <feature name="AA"/>
+        </mandatoryConform>
+      </field>
     </command>
-    <command id="0x07" name="FastForward" response="PlaybackResponse">
+    <command id="0x07" name="FastForward" direction="commandToServer" response="PlaybackResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="VS"/>
       </mandatoryConform>
+      <field id="0" name="AudioAdvanceUnmuted" type="bool" default="false">
+        <mandatoryConform>
+          <feature name="AA"/>
+        </mandatoryConform>
+      </field>
     </command>
-    <command id="0x08" name="SkipForward" response="PlaybackResponse">
+    <command id="0x08" name="SkipForward" direction="commandToServer" response="PlaybackResponse">
       <access invokePrivilege="operate"/>
       <optionalConform/>
       <field id="0" name="DeltaPositionMilliseconds" type="uint64">
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x09" name="SkipBackward" response="PlaybackResponse">
+    <command id="0x09" name="SkipBackward" direction="commandToServer" response="PlaybackResponse">
       <access invokePrivilege="operate"/>
       <optionalConform/>
       <field id="0" name="DeltaPositionMilliseconds" type="uint64">
@@ -225,7 +364,6 @@
       </field>
     </command>
     <command id="0x0A" name="PlaybackResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="StatusEnum">
         <mandatoryConform/>
@@ -235,7 +373,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x0B" name="Seek" response="PlaybackResponse">
+    <command id="0x0B" name="Seek" direction="commandToServer" response="PlaybackResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="AS"/>
@@ -244,5 +382,92 @@
         <mandatoryConform/>
       </field>
     </command>
+    <command id="0x0C" name="ActivateAudioTrack" direction="commandToServer" response="Y">
+      <access invokePrivilege="operate"/>
+      <mandatoryConform>
+        <feature name="AT"/>
+      </mandatoryConform>
+      <field id="0" name="TrackID" type="string">
+        <mandatoryConform/>
+        <constraint type="desc"/>
+      </field>
+      <field id="1" name="AudioOutputIndex" type="uint8">
+        <quality nullable="true"/>
+        <mandatoryConform/>
+        <constraint type="desc"/>
+      </field>
+    </command>
+    <command id="0x0D" name="ActivateTextTrack" direction="commandToServer" response="Y">
+      <access invokePrivilege="operate"/>
+      <mandatoryConform>
+        <feature name="TT"/>
+      </mandatoryConform>
+      <field id="0" name="TrackID" type="string">
+        <mandatoryConform/>
+        <constraint type="desc"/>
+      </field>
+    </command>
+    <command id="0x0E" name="DeactivateTextTrack" direction="commandToServer" response="Y">
+      <access invokePrivilege="operate"/>
+      <mandatoryConform>
+        <feature name="TT"/>
+      </mandatoryConform>
+    </command>
   </commands>
+  <events>
+    <event id="0x00" name="StateChanged" priority="info">
+      <access readPrivilege="view"/>
+      <optionalConform/>
+      <field id="0" name="CurrentState" type="PlaybackStateEnum">
+        <mandatoryConform/>
+        <constraint type="desc"/>
+      </field>
+      <field id="1" name="StartTime" type="epoch-us">
+        <mandatoryConform>
+          <feature name="AS"/>
+        </mandatoryConform>
+        <constraint type="desc"/>
+      </field>
+      <field id="2" name="Duration" type="uint64">
+        <mandatoryConform>
+          <feature name="AS"/>
+        </mandatoryConform>
+        <constraint type="desc"/>
+      </field>
+      <field id="3" name="SampledPosition" type="PlaybackPositionStruct">
+        <mandatoryConform>
+          <feature name="AS"/>
+        </mandatoryConform>
+        <constraint type="desc"/>
+      </field>
+      <field id="4" name="PlaybackSpeed" type="single">
+        <mandatoryConform>
+          <feature name="AS"/>
+        </mandatoryConform>
+        <constraint type="desc"/>
+      </field>
+      <field id="5" name="SeekRangeEnd" type="uint64">
+        <mandatoryConform>
+          <feature name="AS"/>
+        </mandatoryConform>
+        <constraint type="desc"/>
+      </field>
+      <field id="6" name="SeekRangeStart" type="uint64">
+        <mandatoryConform>
+          <feature name="AS"/>
+        </mandatoryConform>
+        <constraint type="desc"/>
+      </field>
+      <field id="7" name="Data" type="octstr">
+        <optionalConform/>
+        <constraint type="maxLength" value="900"/>
+      </field>
+      <field id="8" name="AudioAdvanceUnmuted" type="bool" default="false">
+        <mandatoryConform>
+          <feature name="AA"/>
+        </mandatoryConform>
+        <constraint type="desc"/>
+      </field>
+    </event>
+  </events>
 </cluster>
\ No newline at end of file
diff --git a/data_model/clusters/Messages.xml b/data_model/clusters/Messages.xml
index 9dd223d..cea28ac 100644
--- a/data_model/clusters/Messages.xml
+++ b/data_model/clusters/Messages.xml
@@ -55,6 +55,8 @@
 508 Second Street, Suite 206 +

 Davis, CA 95616, USA

 

+:xrefstyle: short

+

 Copyright (C) Connectivity Standards Alliance (2021). All rights reserved. This

 information within this document is the property of the Connectivity Standards

 Alliance and its use and disclosure are restricted.

@@ -91,6 +93,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0097" name="Messages" revision="3">
   <revisionHistory>
@@ -98,6 +102,9 @@
     <revision revision="2" summary="Updated from SE1.4 version; CCB 1819"/>
     <revision revision="3" summary="Initial Matter release; renamed from EnergyMessaging to Messages"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0097" name="Messages"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="MESS" scope="Endpoint"/>
   <features>
     <feature bit="0" code="CONF" name="ReceivedConfirmation">
@@ -245,7 +252,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="PresentMessagesRequest" response="Y">
+    <command id="0x00" name="PresentMessagesRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="MessageID" type="MessageID">
@@ -275,7 +282,7 @@
         </mandatoryConform>
       </field>
     </command>
-    <command id="0x01" name="CancelMessagesRequest" response="Y">
+    <command id="0x01" name="CancelMessagesRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="MessageIDs" type="list">
diff --git a/data_model/clusters/MicrowaveOvenControl.xml b/data_model/clusters/MicrowaveOvenControl.xml
index c95d713..d7c6f72 100644
--- a/data_model/clusters/MicrowaveOvenControl.xml
+++ b/data_model/clusters/MicrowaveOvenControl.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x005F" name="Microwave Oven Control" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x005F" name="Microwave Oven Control"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="MWOCTRL" scope="Endpoint"/>
   <features>
     <feature bit="0" code="PWRNUM" name="PowerAsNumber" summary="Power is specified as a unitless number or a percentage">
@@ -114,7 +119,7 @@
       <mandatoryConform>
         <feature name="PWRLMTS"/>
       </mandatoryConform>
-      <constraint type="between" from="1" to="(MaxPower - MinPower)"/>
+      <constraint type="between" from="1" to="MaxPower - MinPower"/>
     </attribute>
     <attribute id="0x0006" name="SupportedWatts" type="list" default="MS">
       <entry type="uint16"/>
@@ -139,7 +144,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="SetCookingParameters" response="Y">
+    <command id="0x00" name="SetCookingParameters" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="CookMode" type="uint8" default="desc">
@@ -166,7 +171,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x01" name="AddMoreTime" response="Y">
+    <command id="0x01" name="AddMoreTime" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <optionalConform/>
       <field id="0" name="TimeToAdd" type="elapsed-s">
diff --git a/data_model/clusters/ModeBase.xml b/data_model/clusters/ModeBase.xml
index 5774a7f..2a11f85 100644
--- a/data_model/clusters/ModeBase.xml
+++ b/data_model/clusters/ModeBase.xml
@@ -61,6 +61,9 @@
     <revision revision="2" summary="ChangeToModeResponse command: StatusText must be provided for InvalidInMode status.
 Require at least one standard mode tag. Define reserved ranges for base/derived clusters"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId name="Mode Base"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="MODB" scope="Endpoint"/>
   <features>
     <feature bit="0" code="DEPONOFF" name="OnOff" summary="Dependency with the OnOff cluster">
@@ -122,7 +125,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="ChangeToMode" response="ChangeToModeResponse">
+    <command id="0x00" name="ChangeToMode" direction="commandToServer" response="ChangeToModeResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="NewMode" type="uint8">
diff --git a/data_model/clusters/ModeSelect.xml b/data_model/clusters/ModeSelect.xml
index 19fe502..a30a5b9 100644
--- a/data_model/clusters/ModeSelect.xml
+++ b/data_model/clusters/ModeSelect.xml
@@ -60,6 +60,9 @@
     <revision revision="1" summary="Initial version"/>
     <revision revision="2" summary="The MfgCode field was marked non-nullable. Updated the related text. Reorder sections."/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0050" name="Mode Select"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="MOD" scope="Endpoint"/>
   <features>
     <feature bit="0" code="DEPONOFF" name="OnOff" summary="Dependency with the OnOff cluster">
@@ -133,7 +136,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="ChangeToMode" response="Y">
+    <command id="0x00" name="ChangeToMode" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="NewMode" type="uint8">
diff --git a/data_model/clusters/Mode_DeviceEnergyManagement.xml b/data_model/clusters/Mode_DeviceEnergyManagement.xml
index 4181b9b..592c7d4 100644
--- a/data_model/clusters/Mode_DeviceEnergyManagement.xml
+++ b/data_model/clusters/Mode_DeviceEnergyManagement.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x009F" name="Device Energy Management Mode" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x009F" name="Device Energy Management Mode"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Mode Base" role="application" picsCode="DEMM" scope="Endpoint"/>
   <dataTypes>
     <struct name="ModeOptionStruct">
diff --git a/data_model/clusters/Mode_Dishwasher.xml b/data_model/clusters/Mode_Dishwasher.xml
index 22d0fab..4ff6e78 100644
--- a/data_model/clusters/Mode_Dishwasher.xml
+++ b/data_model/clusters/Mode_Dishwasher.xml
@@ -54,12 +54,17 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0059" name="Dishwasher Mode" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
     <revision revision="2" summary="ChangeToModeResponse command: StatusText must be provided for InvalidInMode status"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0059" name="Dishwasher Mode"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Mode Base" role="application" picsCode="DISHM" scope="Endpoint"/>
   <dataTypes>
     <struct name="ModeOptionStruct">
diff --git a/data_model/clusters/Mode_EVSE.xml b/data_model/clusters/Mode_EVSE.xml
index 2a600e3..de88cb3 100644
--- a/data_model/clusters/Mode_EVSE.xml
+++ b/data_model/clusters/Mode_EVSE.xml
@@ -54,10 +54,15 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x009D" name="Energy EVSE Mode" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x009D" name="Energy EVSE Mode"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Mode Base" role="application" picsCode="EEVSEM" scope="Endpoint"/>
 </cluster>
\ No newline at end of file
diff --git a/data_model/clusters/Mode_LaundryWasher.xml b/data_model/clusters/Mode_LaundryWasher.xml
index e89778f..c59b2c3 100644
--- a/data_model/clusters/Mode_LaundryWasher.xml
+++ b/data_model/clusters/Mode_LaundryWasher.xml
@@ -54,12 +54,17 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0051" name="Laundry Washer Mode" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
     <revision revision="2" summary="ChangeToModeResponse command: StatusText must be provided for InvalidInMode status"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0051" name="Laundry Washer Mode"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Mode Base" role="application" picsCode="LWM" scope="Endpoint"/>
   <dataTypes>
     <struct name="ModeOptionStruct">
diff --git a/data_model/clusters/Mode_MicrowaveOven.xml b/data_model/clusters/Mode_MicrowaveOven.xml
index cd98c18..6e8a129 100644
--- a/data_model/clusters/Mode_MicrowaveOven.xml
+++ b/data_model/clusters/Mode_MicrowaveOven.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x005E" name="Microwave Oven Mode" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x005E" name="Microwave Oven Mode"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Mode Base" role="application" picsCode="MWOM" scope="Endpoint"/>
   <attributes>
     <attribute id="0x0000" name="SupportedModes">
@@ -75,12 +80,10 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="ChangeToMode" direction="commandToClient">
-      <access invokePrivilege="operate"/>
+    <command id="0x00" name="ChangeToMode">
       <disallowConform/>
     </command>
-    <command id="0x01" name="ChangeToModeResponse" direction="commandToClient">
-      <access invokePrivilege="operate"/>
+    <command id="0x01" name="ChangeToModeResponse">
       <disallowConform/>
     </command>
   </commands>
diff --git a/data_model/clusters/Mode_Oven.xml b/data_model/clusters/Mode_Oven.xml
index 56a369d..f6c7111 100644
--- a/data_model/clusters/Mode_Oven.xml
+++ b/data_model/clusters/Mode_Oven.xml
@@ -54,10 +54,15 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0049" name="Oven Mode" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0049" name="Oven Mode"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Mode Base" role="application" picsCode="OTCCM" scope="Endpoint"/>
 </cluster>
\ No newline at end of file
diff --git a/data_model/clusters/Mode_RVCClean.xml b/data_model/clusters/Mode_RVCClean.xml
index 6411851..d1b2272 100644
--- a/data_model/clusters/Mode_RVCClean.xml
+++ b/data_model/clusters/Mode_RVCClean.xml
@@ -54,12 +54,17 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0055" name="RVC Clean Mode" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
     <revision revision="2" summary="Add constraint about changing cleaning modes while the RVC Run Mode cluster is in a non-Idle mode. ChangeToModeResponse command: StatusText must be provided for InvalidInMode status. Deprecate the OnMode attribute and the related feature map bit."/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0055" name="RVC Clean Mode"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Mode Base" role="application" picsCode="RVCCLEANM" scope="Endpoint"/>
   <attributes>
     <attribute id="0x0000" name="SupportedModes">
diff --git a/data_model/clusters/Mode_RVCRun.xml b/data_model/clusters/Mode_RVCRun.xml
index 8f49741..8e19b45 100644
--- a/data_model/clusters/Mode_RVCRun.xml
+++ b/data_model/clusters/Mode_RVCRun.xml
@@ -54,12 +54,17 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0054" name="RVC Run Mode" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
     <revision revision="2" summary="Add constraint about switching from non-Idle to non-Idle modes. ChangeToModeResponse command: StatusText must be provided for InvalidInMode status. Deprecate the OnMode attribute and the related feature map bit. Add the Mapping mode tag."/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0054" name="RVC Run Mode"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Mode Base" role="application" picsCode="RVCRUNM" scope="Endpoint"/>
   <attributes>
     <attribute id="0x0000" name="SupportedModes">
diff --git a/data_model/clusters/Mode_Refrigerator.xml b/data_model/clusters/Mode_Refrigerator.xml
index cf6a657..d51e30b 100644
--- a/data_model/clusters/Mode_Refrigerator.xml
+++ b/data_model/clusters/Mode_Refrigerator.xml
@@ -54,12 +54,17 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0052" name="Refrigerator And Temperature Controlled Cabinet Mode" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
     <revision revision="2" summary="ChangeToModeResponse command: StatusText must be provided for InvalidInMode status"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0052" name="Refrigerator And Temperature Controlled Cabinet Mode"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Mode Base" role="application" picsCode="TCCM" scope="Endpoint"/>
   <dataTypes>
     <struct name="ModeOptionStruct">
diff --git a/data_model/clusters/Mode_WaterHeater.xml b/data_model/clusters/Mode_WaterHeater.xml
index 69fba08..56f1a1e 100644
--- a/data_model/clusters/Mode_WaterHeater.xml
+++ b/data_model/clusters/Mode_WaterHeater.xml
@@ -54,10 +54,15 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x009E" name="Water Heater Mode" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x009E" name="Water Heater Mode"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Mode Base" role="application" picsCode="WHM" scope="Endpoint"/>
 </cluster>
\ No newline at end of file
diff --git a/data_model/clusters/NetworkCommissioningCluster.xml b/data_model/clusters/NetworkCommissioningCluster.xml
index 0153146..86c7a01 100644
--- a/data_model/clusters/NetworkCommissioningCluster.xml
+++ b/data_model/clusters/NetworkCommissioningCluster.xml
@@ -1,7 +1,5 @@
 <?xml version="1.0"?>
 <!--

-link:../matter-defines.adoc[]

-

 Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.

 The information within this document is the property of the Connectivity

 Standards Alliance and its use and disclosure are restricted, except as

@@ -56,12 +54,17 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0031" name="Network Commissioning" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
-    <revision revision="2" summary="Support determining capabilities for Wi-Fi and Thread interfaces. Additional Wi-Fi directed scanning requirements."/>
+    <revision revision="2" summary="Support determining capabilities for Wi-Fi and Thread interfaces. Additional Wi-Fi directed scanning requirements.
+Added support for Wi-Fi Per-Device Credentials (PDC feature; QueryIdentity and QueryIdentityResponse commands; PDC-related fields in commands)."/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0031" name="Network Commissioning"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="CNET" scope="Node"/>
   <features>
     <feature bit="0" code="WI" name="WiFiNetworkInterface" summary="Wi-Fi related features">
@@ -73,6 +76,11 @@
     <feature bit="2" code="ET" name="EthernetNetworkInterface" summary="Ethernet related features">
       <optionalConform choice="a"/>
     </feature>
+    <feature bit="3" code="PDC" name="PerDeviceCredentials" summary="Wi-Fi Per-Device Credentials">
+      <mandatoryConform>
+        <feature name="WI"/>
+      </mandatoryConform>
+    </feature>
   </features>
   <dataTypes>
     <enum name="NetworkCommissioningStatusEnum">
@@ -169,15 +177,34 @@
       <bitfield name="WPA3" bit="4" summary="Supports Wi-Fi using WPA3-Personal security">
         <mandatoryConform/>
       </bitfield>
+      <bitfield name="WPA3" bit="5" summary="Supports Wi-Fi using Per-Device Credentials">
+        <mandatoryConform/>
+      </bitfield>
     </bitmap>
     <struct name="NetworkInfoStruct">
-      <field id="0" name="NetworkID" type="ref_DataTypeOctstr">
+      <field id="0" name="NetworkID" type="octstr">
         <mandatoryConform/>
-        <constraint type="between" from="1" to="32"/>
+        <constraint type="lengthBetween" from="1" to="32"/>
       </field>
       <field id="1" name="Connected" type="bool">
         <mandatoryConform/>
       </field>
+      <field id="2" name="NetworkIdentifier" type="octstr" default="null">
+        <quality nullable="true"/>
+        <mandatoryConform>
+          <feature name="PDC"/>
+        </mandatoryConform>
+        <constraint type="maxLength" value="20"/>
+        <constraint type="desc"/>
+      </field>
+      <field id="3" name="ClientIdentifier" type="octstr" default="null">
+        <quality nullable="true"/>
+        <mandatoryConform>
+          <feature name="PDC"/>
+        </mandatoryConform>
+        <constraint type="maxLength" value="20"/>
+        <constraint type="desc"/>
+      </field>
     </struct>
     <struct name="ThreadInterfaceScanResultStruct">
       <field id="0" name="PanId" type="uint16">
@@ -191,11 +218,11 @@
           <feature name="TH"/>
         </mandatoryConform>
       </field>
-      <field id="2" name="NetworkName" type="ref_DataTypeString">
+      <field id="2" name="NetworkName" type="string">
         <mandatoryConform>
           <feature name="TH"/>
         </mandatoryConform>
-        <constraint type="between" from="1" to="16"/>
+        <constraint type="lengthBetween" from="1" to="16"/>
       </field>
       <field id="3" name="Channel" type="uint16">
         <mandatoryConform>
@@ -229,17 +256,17 @@
           <feature name="WI"/>
         </mandatoryConform>
       </field>
-      <field id="1" name="SSID" type="ref_DataTypeOctstr">
+      <field id="1" name="SSID" type="octstr">
         <mandatoryConform>
           <feature name="WI"/>
         </mandatoryConform>
-        <constraint type="max" value="32"/>
+        <constraint type="maxLength" value="32"/>
       </field>
-      <field id="2" name="BSSID" type="ref_DataTypeOctstr">
+      <field id="2" name="BSSID" type="octstr">
         <mandatoryConform>
           <feature name="WI"/>
         </mandatoryConform>
-        <constraint type="allowed" value="6"/>
+        <constraint type="maxLength" value="6"/>
       </field>
       <field id="3" name="Channel" type="uint16">
         <mandatoryConform>
@@ -265,10 +292,11 @@
       <mandatoryConform/>
       <constraint type="min" value="1"/>
     </attribute>
-    <attribute id="0x0001" name="Networks" type="ref_DataTypeList[NetworkInfoStruct Type]" default="empty">
+    <attribute id="0x0001" name="Networks" type="list" default="empty">
+      <entry type="NetworkInfoStruct"/>
       <access read="true" readPrivilege="admin"/>
       <mandatoryConform/>
-      <constraint type="max" value="MaxNetworks"/>
+      <constraint type="maxCount" value="MaxNetworks"/>
     </attribute>
     <attribute id="0x0002" name="ScanMaxTimeSeconds" type="uint8">
       <access read="true" readPrivilege="view"/>
@@ -302,24 +330,25 @@
       <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
       <mandatoryConform/>
     </attribute>
-    <attribute id="0x0006" name="LastNetworkID" type="ref_DataTypeOctstr" default="null">
+    <attribute id="0x0006" name="LastNetworkID" type="octstr" default="null">
       <access read="true" readPrivilege="admin"/>
       <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
       <mandatoryConform/>
-      <constraint type="between" from="1" to="32"/>
+      <constraint type="lengthBetween" from="1" to="32"/>
     </attribute>
     <attribute id="0x0007" name="LastConnectErrorValue" type="int32" default="null">
       <access read="true" readPrivilege="admin"/>
       <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
       <mandatoryConform/>
     </attribute>
-    <attribute id="0x0008" name="SupportedWiFiBands" type="ref_DataTypeList[WiFiBandEnum Type]" default="MS">
+    <attribute id="0x0008" name="SupportedWiFiBands" type="list" default="MS">
+      <entry type="WiFiBandEnum"/>
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
       <mandatoryConform>
         <feature name="WI"/>
       </mandatoryConform>
-      <constraint type="min" value="1"/>
+      <constraint type="minCount" value="1"/>
     </attribute>
     <attribute id="0x0009" name="SupportedThreadFeatures" type="ThreadCapabilitiesBitmap" default="MS">
       <access read="true" readPrivilege="view"/>
@@ -337,7 +366,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="ScanNetworks" response="ScanNetworksResponse">
+    <command id="0x00" name="ScanNetworks" direction="commandToServer" response="ScanNetworksResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <orTerm>
@@ -345,19 +374,18 @@
           <feature name="TH"/>
         </orTerm>
       </mandatoryConform>
-      <field id="0" name="SSID" type="ref_DataTypeOctstr" default="null">
+      <field id="0" name="SSID" type="octstr" default="null">
         <quality nullable="true"/>
         <optionalConform>
           <feature name="WI"/>
         </optionalConform>
-        <constraint type="between" from="1" to="32"/>
+        <constraint type="lengthBetween" from="1" to="32"/>
       </field>
       <field id="1" name="Breadcrumb" type="uint64">
         <optionalConform/>
       </field>
     </command>
     <command id="0x01" name="ScanNetworksResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <orTerm>
           <feature name="WI"/>
@@ -368,54 +396,68 @@
         <mandatoryConform/>
         <constraint type="desc"/>
       </field>
-      <field id="1" name="DebugText" type="ref_DataTypeString">
+      <field id="1" name="DebugText" type="string">
         <optionalConform/>
-        <constraint type="max" value="512"/>
+        <constraint type="maxLength" value="512"/>
       </field>
-      <field id="2" name="WiFiScanResults" type="ref_DataTypeList[WiFiInterfaceScanResultStruct Type]">
+      <field id="2" name="WiFiScanResults" type="list">
+        <entry type="WiFiInterfaceScanResultStruct"/>
         <mandatoryConform>
           <feature name="WI"/>
         </mandatoryConform>
         <constraint type="desc"/>
       </field>
-      <field id="3" name="ThreadScanResults" type="ref_DataTypeList[ThreadInterfaceScanResultStruct Type]">
+      <field id="3" name="ThreadScanResults" type="list">
+        <entry type="ThreadInterfaceScanResultStruct"/>
         <mandatoryConform>
           <feature name="TH"/>
         </mandatoryConform>
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x02" name="AddOrUpdateWiFiNetwork" response="NetworkConfigResponse">
+    <command id="0x02" name="AddOrUpdateWiFiNetwork" direction="commandToServer" response="NetworkConfigResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <feature name="WI"/>
       </mandatoryConform>
-      <field id="0" name="SSID" type="ref_DataTypeOctstr">
+      <field id="0" name="SSID" type="octstr">
         <mandatoryConform/>
-        <constraint type="max" value="32"/>
+        <constraint type="maxLength" value="32"/>
       </field>
-      <field id="1" name="Credentials" type="ref_DataTypeOctstr">
+      <field id="1" name="Credentials" type="octstr">
         <mandatoryConform/>
-        <constraint type="max" value="64"/>
+        <constraint type="maxLength" value="64"/>
       </field>
       <field id="2" name="Breadcrumb" type="uint64">
         <optionalConform/>
       </field>
+      <field id="3" name="NetworkIdentity" type="octstr">
+        <optionalConform>
+          <feature name="PDC"/>
+        </optionalConform>
+        <constraint type="maxLength" value="140"/>
+      </field>
+      <field id="4" name="ClientIdentifier" type="octstr">
+        <constraint type="maxLength" value="20"/>
+      </field>
+      <field id="5" name="PossessionNonce" type="octstr">
+        <constraint type="maxLength" value="32"/>
+      </field>
     </command>
-    <command id="0x03" name="AddOrUpdateThreadNetwork" response="NetworkConfigResponse">
+    <command id="0x03" name="AddOrUpdateThreadNetwork" direction="commandToServer" response="NetworkConfigResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <feature name="TH"/>
       </mandatoryConform>
-      <field id="0" name="OperationalDataset" type="ref_DataTypeOctstr">
+      <field id="0" name="OperationalDataset" type="octstr">
         <mandatoryConform/>
-        <constraint type="max" value="254"/>
+        <constraint type="maxLength" value="254"/>
       </field>
       <field id="1" name="Breadcrumb" type="uint64">
         <optionalConform/>
       </field>
     </command>
-    <command id="0x04" name="RemoveNetwork" response="NetworkConfigResponse">
+    <command id="0x04" name="RemoveNetwork" direction="commandToServer" response="NetworkConfigResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <orTerm>
@@ -423,16 +465,15 @@
           <feature name="TH"/>
         </orTerm>
       </mandatoryConform>
-      <field id="0" name="NetworkID" type="ref_DataTypeOctstr">
+      <field id="0" name="NetworkID" type="octstr">
         <mandatoryConform/>
-        <constraint type="between" from="1" to="32"/>
+        <constraint type="lengthBetween" from="1" to="32"/>
       </field>
       <field id="1" name="Breadcrumb" type="uint64">
         <optionalConform/>
       </field>
     </command>
     <command id="0x05" name="NetworkConfigResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <orTerm>
           <feature name="WI"/>
@@ -443,16 +484,28 @@
         <mandatoryConform/>
         <constraint type="desc"/>
       </field>
-      <field id="1" name="DebugText" type="ref_DataTypeString">
+      <field id="1" name="DebugText" type="string">
         <optionalConform/>
-        <constraint type="max" value="512"/>
+        <constraint type="maxLength" value="512"/>
       </field>
       <field id="2" name="NetworkIndex" type="uint8">
         <optionalConform/>
-        <constraint type="between" from="0" to="(MaxNetworks - 1)"/>
+        <constraint type="between" from="0" to="MaxNetworks - 1"/>
+      </field>
+      <field id="3" name="ClientIdentity" type="octstr">
+        <optionalConform>
+          <feature name="PDC"/>
+        </optionalConform>
+        <constraint type="maxLength" value="140"/>
+      </field>
+      <field id="4" name="PossessionSignature" type="octstr">
+        <optionalConform>
+          <feature name="PDC"/>
+        </optionalConform>
+        <constraint type="maxLength" value="64"/>
       </field>
     </command>
-    <command id="0x06" name="ConnectNetwork" response="ConnectNetworkResponse">
+    <command id="0x06" name="ConnectNetwork" direction="commandToServer" response="ConnectNetworkResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <orTerm>
@@ -460,16 +513,15 @@
           <feature name="TH"/>
         </orTerm>
       </mandatoryConform>
-      <field id="0" name="NetworkID" type="ref_DataTypeOctstr">
+      <field id="0" name="NetworkID" type="octstr">
         <mandatoryConform/>
-        <constraint type="between" from="1" to="32"/>
+        <constraint type="lengthBetween" from="1" to="32"/>
       </field>
       <field id="1" name="Breadcrumb" type="uint64">
         <optionalConform/>
       </field>
     </command>
     <command id="0x07" name="ConnectNetworkResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <orTerm>
           <feature name="WI"/>
@@ -479,7 +531,7 @@
       <field id="0" name="NetworkingStatus" type="NetworkCommissioningStatusEnum">
         <mandatoryConform/>
       </field>
-      <field id="1" name="DebugText" type="ref_DataTypeString">
+      <field id="1" name="DebugText" type="string">
         <optionalConform/>
       </field>
       <field id="2" name="ErrorValue" type="int32">
@@ -487,7 +539,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x08" name="ReorderNetwork" response="NetworkConfigResponse">
+    <command id="0x08" name="ReorderNetwork" direction="commandToServer" response="NetworkConfigResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform>
         <orTerm>
@@ -495,9 +547,9 @@
           <feature name="TH"/>
         </orTerm>
       </mandatoryConform>
-      <field id="0" name="NetworkID" type="ref_DataTypeOctstr">
+      <field id="0" name="NetworkID" type="octstr">
         <mandatoryConform/>
-        <constraint type="between" from="1" to="32"/>
+        <constraint type="lengthBetween" from="1" to="32"/>
       </field>
       <field id="1" name="NetworkIndex" type="uint8">
         <mandatoryConform/>
@@ -507,5 +559,32 @@
         <optionalConform/>
       </field>
     </command>
+    <command id="0x09" name="QueryIdentity" direction="commandToServer" response="QueryIdentityResponse">
+      <access invokePrivilege="admin"/>
+      <mandatoryConform>
+        <feature name="PDC"/>
+      </mandatoryConform>
+      <field id="0" name="KeyIdentifier" type="octstr">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="20"/>
+      </field>
+      <field id="1" name="PossessionNonce" type="octstr">
+        <optionalConform/>
+        <constraint type="maxLength" value="32"/>
+      </field>
+    </command>
+    <command id="0x0A" name="QueryIdentityResponse" direction="responseFromServer">
+      <mandatoryConform>
+        <feature name="PDC"/>
+      </mandatoryConform>
+      <field id="0" name="Identity" type="octstr">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="140"/>
+      </field>
+      <field id="1" name="PossessionSignature" type="octstr">
+        <optionalConform/>
+        <constraint type="maxLength" value="64"/>
+      </field>
+    </command>
   </commands>
-</cluster>
\ No newline at end of file
+</cluster>
diff --git a/data_model/clusters/NetworkIdentityManagement.xml b/data_model/clusters/NetworkIdentityManagement.xml
index 08bee6a..8769b68 100644
--- a/data_model/clusters/NetworkIdentityManagement.xml
+++ b/data_model/clusters/NetworkIdentityManagement.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Network Identity Management" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId name="Network Identity Management"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="TODO" scope="Endpoint"/>
   <dataTypes>
     <number name="Client Table" type=""/>
@@ -119,7 +124,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="AddOrUpdateClient" response="Y">
+    <command id="0x00" name="AddOrUpdateClient" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" fabricScoped="true" timed="true"/>
       <mandatoryConform/>
       <field id="0" name="ClientIdentity" type="octstr">
@@ -130,7 +135,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x01" name="RemoveClient" response="Y">
+    <command id="0x01" name="RemoveClient" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" fabricScoped="true" timed="true"/>
       <mandatoryConform/>
       <field id="0" name="ClientNumber" type="uint16">
@@ -141,7 +146,7 @@
         <constraint type="maxLength" value="20"/>
       </field>
     </command>
-    <command id="0x40" name="EndorseNetworkIdentityUpdate" response="Y">
+    <command id="0x40" name="EndorseNetworkIdentityUpdate" direction="commandToServer" response="Y">
       <access invokePrivilege="admin" fabricScoped="true" timed="true"/>
       <mandatoryConform/>
       <field id="0" name="NetworkIdentifier" type="octstr">
diff --git a/data_model/clusters/OTAProvider.xml b/data_model/clusters/OTAProvider.xml
index 7315766..baf3996 100644
--- a/data_model/clusters/OTAProvider.xml
+++ b/data_model/clusters/OTAProvider.xml
@@ -1,7 +1,5 @@
 <?xml version="1.0"?>
 <!--

-link:../matter-defines.adoc[]

-

 Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.

 The information within this document is the property of the Connectivity

 Standards Alliance and its use and disclosure are restricted, except as

@@ -61,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0029" name="OTA Software Update Provider"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="OTAP" scope="Node"/>
   <dataTypes>
     <enum name="ApplyUpdateActionEnum">
@@ -104,10 +105,10 @@
     </enum>
   </dataTypes>
   <commands>
-    <command id="0x00" name="QueryImage" response="QueryImageResponse">
+    <command id="0x00" name="QueryImage" direction="commandToServer" response="QueryImageResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
-      <field id="0" name="VendorID" type="ref_DataTypeVendorId">
+      <field id="0" name="VendorID" type="vendor-id">
         <mandatoryConform/>
       </field>
       <field id="1" name="ProductID" type="uint16">
@@ -116,27 +117,27 @@
       <field id="2" name="SoftwareVersion" type="uint32">
         <mandatoryConform/>
       </field>
-      <field id="3" name="ProtocolsSupported" type="ref_DataTypeList[DownloadProtocolEnum Type]">
+      <field id="3" name="ProtocolsSupported" type="list">
+        <entry type="DownloadProtocolEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="8"/>
+        <constraint type="maxCount" value="8"/>
       </field>
       <field id="4" name="HardwareVersion" type="uint16">
         <optionalConform/>
       </field>
-      <field id="5" name="Location" type="ref_DataTypeString">
+      <field id="5" name="Location" type="string">
         <optionalConform/>
-        <constraint type="allowed" value="2"/>
+        <constraint type="maxLength" value="2"/>
       </field>
       <field id="6" name="RequestorCanConsent" type="bool" default="False">
         <optionalConform/>
       </field>
-      <field id="7" name="MetadataForProvider" type="ref_DataTypeOctstr">
+      <field id="7" name="MetadataForProvider" type="octstr">
         <optionalConform/>
-        <constraint type="max" value="512"/>
+        <constraint type="maxLength" value="512"/>
       </field>
     </command>
     <command id="0x01" name="QueryImageResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="StatusEnum">
         <mandatoryConform/>
@@ -144,42 +145,41 @@
       <field id="1" name="DelayedActionTime" type="uint32">
         <optionalConform/>
       </field>
-      <field id="2" name="ImageURI" type="ref_DataTypeString">
+      <field id="2" name="ImageURI" type="string">
         <optionalConform/>
-        <constraint type="max" value="256"/>
+        <constraint type="maxLength" value="256"/>
       </field>
       <field id="3" name="SoftwareVersion" type="uint32">
         <optionalConform/>
       </field>
-      <field id="4" name="SoftwareVersionString" type="ref_DataTypeString">
+      <field id="4" name="SoftwareVersionString" type="string">
         <optionalConform/>
-        <constraint type="between" from="1" to="64"/>
+        <constraint type="lengthBetween" from="1" to="64"/>
       </field>
-      <field id="5" name="UpdateToken" type="ref_DataTypeOctstr">
+      <field id="5" name="UpdateToken" type="octstr">
         <optionalConform/>
-        <constraint type="between" from="8" to="32"/>
+        <constraint type="lengthBetween" from="8" to="32"/>
       </field>
       <field id="6" name="UserConsentNeeded" type="bool" default="False">
         <optionalConform/>
       </field>
-      <field id="7" name="MetadataForRequestor" type="ref_DataTypeOctstr">
+      <field id="7" name="MetadataForRequestor" type="octstr">
         <optionalConform/>
-        <constraint type="max" value="512"/>
+        <constraint type="maxLength" value="512"/>
       </field>
     </command>
-    <command id="0x02" name="ApplyUpdateRequest" response="ApplyUpdateResponse">
+    <command id="0x02" name="ApplyUpdateRequest" direction="commandToServer" response="ApplyUpdateResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
-      <field id="0" name="UpdateToken" type="ref_DataTypeOctstr">
+      <field id="0" name="UpdateToken" type="octstr">
         <mandatoryConform/>
-        <constraint type="between" from="8" to="32"/>
+        <constraint type="lengthBetween" from="8" to="32"/>
       </field>
       <field id="1" name="NewVersion" type="uint32">
         <mandatoryConform/>
       </field>
     </command>
     <command id="0x03" name="ApplyUpdateResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Action" type="ApplyUpdateActionEnum">
         <mandatoryConform/>
@@ -188,12 +188,12 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x04" name="NotifyUpdateApplied" response="Y">
+    <command id="0x04" name="NotifyUpdateApplied" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
-      <field id="0" name="UpdateToken" type="ref_DataTypeOctstr">
+      <field id="0" name="UpdateToken" type="octstr">
         <mandatoryConform/>
-        <constraint type="between" from="8" to="32"/>
+        <constraint type="lengthBetween" from="8" to="32"/>
       </field>
       <field id="1" name="SoftwareVersion" type="uint32">
         <mandatoryConform/>
diff --git a/data_model/clusters/OTARequestor.xml b/data_model/clusters/OTARequestor.xml
index 3871797..592e900 100644
--- a/data_model/clusters/OTARequestor.xml
+++ b/data_model/clusters/OTARequestor.xml
@@ -1,7 +1,5 @@
 <?xml version="1.0"?>
 <!--

-link:../matter-defines.adoc[]

-

 Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.

 The information within this document is the property of the Connectivity

 Standards Alliance and its use and disclosure are restricted, except as

@@ -61,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x002A" name="OTA Software Update Requestor"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="OTAR" scope="Node"/>
   <dataTypes>
     <enum name="AnnouncementReasonEnum">
@@ -122,17 +123,18 @@
       </item>
     </enum>
     <struct name="ProviderLocation">
-      <field id="1" name="ProviderNodeID" type="ref_DataTypeNodeId">
+      <field id="1" name="ProviderNodeID" type="node-id">
         <mandatoryConform/>
       </field>
-      <field id="2" name="Endpoint" type="ref_DataTypeEndpointNumber">
+      <field id="2" name="Endpoint" type="endpoint-no">
         <mandatoryConform/>
       </field>
       <access fabricScoped="true"/>
     </struct>
   </dataTypes>
   <attributes>
-    <attribute id="0x0000" name="DefaultOTAProviders" type="ref_DataTypeList[ProviderLocation Type]" default="[]">
+    <attribute id="0x0000" name="DefaultOTAProviders" type="list" default="[]">
+      <entry type="ProviderLocation"/>
       <access read="true" write="true" readPrivilege="view" writePrivilege="admin" fabricScoped="true"/>
       <mandatoryConform/>
       <constraint type="desc"/>
@@ -153,23 +155,23 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="AnnounceOTAProvider" response="Y">
+    <command id="0x00" name="AnnounceOTAProvider" direction="commandToServer" response="Y">
       <access invokePrivilege="admin"/>
       <optionalConform/>
-      <field id="0" name="ProviderNodeID" type="ref_DataTypeNodeId">
+      <field id="0" name="ProviderNodeID" type="node-id">
         <mandatoryConform/>
       </field>
-      <field id="1" name="VendorID" type="ref_DataTypeVendorId">
+      <field id="1" name="VendorID" type="vendor-id">
         <mandatoryConform/>
       </field>
       <field id="2" name="AnnouncementReason" type="AnnouncementReasonEnum">
         <mandatoryConform/>
       </field>
-      <field id="3" name="MetadataForNode" type="ref_DataTypeOctstr">
+      <field id="3" name="MetadataForNode" type="octstr">
         <optionalConform/>
-        <constraint type="max" value="512"/>
+        <constraint type="maxLength" value="512"/>
       </field>
-      <field id="4" name="Endpoint" type="ref_DataTypeEndpointNumber">
+      <field id="4" name="Endpoint" type="endpoint-no">
         <mandatoryConform/>
       </field>
     </command>
diff --git a/data_model/clusters/OTASoftwareUpdate.xml b/data_model/clusters/OTASoftwareUpdate.xml
index 2c87e6a..16389bd 100644
--- a/data_model/clusters/OTASoftwareUpdate.xml
+++ b/data_model/clusters/OTASoftwareUpdate.xml
@@ -1,7 +1,5 @@
 <?xml version="1.0"?>
 <!--

-link:../matter-defines.adoc[]

-

 Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.

 The information within this document is the property of the Connectivity

 Standards Alliance and its use and disclosure are restricted, except as

diff --git a/data_model/clusters/OccupancySensing.xml b/data_model/clusters/OccupancySensing.xml
index d52f118..9479f20 100644
--- a/data_model/clusters/OccupancySensing.xml
+++ b/data_model/clusters/OccupancySensing.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0406" name="Occupancy Sensing" revision="4">
   <revisionHistory>
@@ -62,6 +64,9 @@
     <revision revision="3" summary="New data model format and notation"/>
     <revision revision="4" summary="Remove nullable from PhysicalContact delay attributes and ability to not report transitions"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0406" name="Occupancy Sensing"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="OCC" scope="Endpoint"/>
   <dataTypes>
     <enum name="OccupancySensorTypeEnum">
diff --git a/data_model/clusters/OnOff.xml b/data_model/clusters/OnOff.xml
index 0d64837..0b1e32a 100644
--- a/data_model/clusters/OnOff.xml
+++ b/data_model/clusters/OnOff.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0006" name="On/Off" revision="6">
   <revisionHistory>
@@ -64,6 +66,9 @@
     <revision revision="5" summary="Addition of Dead Front behavior and associated FeatureMap entry"/>
     <revision revision="6" summary="Addition of OffOnly feature and associated FeatureMap entry"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0006" name="On/Off"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="OO" scope="Endpoint"/>
   <features>
     <feature bit="0" code="LT" name="Lighting" summary="Behavior that supports lighting applications.">
@@ -171,11 +176,11 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="Off" response="Y">
+    <command id="0x00" name="Off" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
-    <command id="0x01" name="On" response="Y">
+    <command id="0x01" name="On" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <notTerm>
@@ -183,7 +188,7 @@
         </notTerm>
       </mandatoryConform>
     </command>
-    <command id="0x02" name="Toggle" response="Y">
+    <command id="0x02" name="Toggle" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <notTerm>
@@ -191,7 +196,7 @@
         </notTerm>
       </mandatoryConform>
     </command>
-    <command id="0x40" name="OffWithEffect" response="Y">
+    <command id="0x40" name="OffWithEffect" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="LT"/>
@@ -205,13 +210,13 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x41" name="OnWithRecallGlobalScene" response="Y">
+    <command id="0x41" name="OnWithRecallGlobalScene" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="LT"/>
       </mandatoryConform>
     </command>
-    <command id="0x42" name="OnWithTimedOff" response="Y">
+    <command id="0x42" name="OnWithTimedOff" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="LT"/>
diff --git a/data_model/clusters/OperationalCredentialCluster.xml b/data_model/clusters/OperationalCredentialCluster.xml
index ec523ba..1a2becd 100644
--- a/data_model/clusters/OperationalCredentialCluster.xml
+++ b/data_model/clusters/OperationalCredentialCluster.xml
@@ -1,7 +1,5 @@
 <?xml version="1.0"?>
 <!--

-link:../matter-defines.adoc[]

-

 Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.

 The information within this document is the property of the Connectivity

 Standards Alliance and its use and disclosure are restricted, except as

@@ -57,10 +55,13 @@
 508 Second Street, Suite 206

 Davis, CA 95616, USA

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x003E" name="Operational Credentials" revision="1">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Node Operational Credentials" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x003E" name="Operational Credentials"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="OPCREDS" scope="Node"/>
   <dataTypes>
     <number name="Attestation Elements" type=""/>
@@ -98,10 +99,10 @@
       <item value="6" name="InvalidAdminSubject" summary="[[ref_InvalidAdminSubject]] Invalid CaseAdminSubject field for an AddNOC command.">
         <mandatoryConform/>
       </item>
-      <item value="7" summary="Reserved for future use">
+      <item value="7" name="Item7" summary="Reserved for future use">
         <mandatoryConform/>
       </item>
-      <item value="8" summary="Reserved for future use">
+      <item value="8" name="Item8" summary="Reserved for future use">
         <mandatoryConform/>
       </item>
       <item value="9" name="FabricConflict" summary="[[ref_FabricConflict]] Trying to AddNOC instead of UpdateNOC against an existing Fabric.">
@@ -115,11 +116,11 @@
       </item>
     </enum>
     <struct name="FabricDescriptorStruct">
-      <field id="1" name="RootPublicKey" type="ref_DataTypeOctstr">
+      <field id="1" name="RootPublicKey" type="octstr">
         <mandatoryConform/>
-        <constraint type="allowed" value="65"/>
+        <constraint type="maxLength" value="65"/>
       </field>
-      <field id="2" name="VendorID" type="ref_DataTypeVendorId">
+      <field id="2" name="VendorID" type="vendor-id">
         <mandatoryConform/>
         <constraint type="desc"/>
       </field>
@@ -136,32 +137,34 @@
       <access fabricScoped="true"/>
     </struct>
     <struct name="NOCStruct">
-      <field id="1" name="NOC" type="ref_DataTypeOctstr">
+      <field id="1" name="NOC" type="octstr">
         <access fabricSensitive="true"/>
         <mandatoryConform/>
-        <constraint type="max" value="400"/>
+        <constraint type="maxLength" value="400"/>
       </field>
-      <field id="2" name="ICAC" type="ref_DataTypeOctstr">
+      <field id="2" name="ICAC" type="octstr">
         <access fabricSensitive="true"/>
         <quality nullable="true"/>
         <mandatoryConform/>
-        <constraint type="max" value="400"/>
+        <constraint type="maxLength" value="400"/>
       </field>
       <access fabricScoped="true"/>
     </struct>
   </dataTypes>
   <attributes>
-    <attribute id="0x0000" name="NOCs" type="ref_DataTypeList[NOCStruct Type]">
+    <attribute id="0x0000" name="NOCs" type="list">
+      <entry type="NOCStruct"/>
       <access read="true" readPrivilege="admin" fabricScoped="true"/>
       <quality changeOmitted="true" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
       <mandatoryConform/>
-      <constraint type="max" value="SupportedFabrics"/>
+      <constraint type="maxCount" value="SupportedFabrics"/>
     </attribute>
-    <attribute id="0x0001" name="Fabrics" type="ref_DataTypeList[FabricDescriptorStruct Type]">
+    <attribute id="0x0001" name="Fabrics" type="list">
+      <entry type="FabricDescriptorStruct"/>
       <access read="true" readPrivilege="view" fabricScoped="true"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
       <mandatoryConform/>
-      <constraint type="max" value="SupportedFabrics"/>
+      <constraint type="maxCount" value="SupportedFabrics"/>
     </attribute>
     <attribute id="0x0002" name="SupportedFabrics" type="uint8">
       <access read="true" readPrivilege="view"/>
@@ -175,10 +178,14 @@
       <mandatoryConform/>
       <constraint type="max" value="SupportedFabrics"/>
     </attribute>
-    <attribute id="0x0004" name="TrustedRootCertificates" type="ref_DataTypeList[ref_DataTypeOctstr]">
+    <attribute id="0x0004" name="TrustedRootCertificates" type="list">
+      <entry type="octstr">
+        <constraint type="maxLength" value="400"/>
+      </entry>
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="true" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
       <mandatoryConform/>
+      <constraint type="maxCount" value="SupportedFabrics"/>
     </attribute>
     <attribute id="0x0005" name="CurrentFabricIndex" type="uint8" default="0">
       <access read="true" readPrivilege="view"/>
@@ -186,7 +193,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="AttestationRequest" response="AttestationResponse">
+    <command id="0x00" name="AttestationRequest" direction="commandToServer" response="AttestationResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform/>
       <field id="0" name="AttestationNonce" type="octstr">
@@ -195,7 +202,6 @@
       </field>
     </command>
     <command id="0x01" name="AttestationResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="AttestationElements" type="octstr">
         <mandatoryConform/>
@@ -206,7 +212,7 @@
         <constraint type="maxLength" value="64"/>
       </field>
     </command>
-    <command id="0x02" name="CertificateChainRequest" response="CertificateChainResponse">
+    <command id="0x02" name="CertificateChainRequest" direction="commandToServer" response="CertificateChainResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform/>
       <field id="0" name="CertificateType" type="CertificateChainTypeEnum">
@@ -215,14 +221,13 @@
       </field>
     </command>
     <command id="0x03" name="CertificateChainResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Certificate" type="octstr">
         <mandatoryConform/>
         <constraint type="maxLength" value="600"/>
       </field>
     </command>
-    <command id="0x04" name="CSRRequest" response="CSRResponse">
+    <command id="0x04" name="CSRRequest" direction="commandToServer" response="CSRResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform/>
       <field id="0" name="CSRNonce" type="octstr">
@@ -234,7 +239,6 @@
       </field>
     </command>
     <command id="0x05" name="CSRResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="NOCSRElements" type="octstr">
         <mandatoryConform/>
@@ -245,29 +249,29 @@
         <constraint type="maxLength" value="64"/>
       </field>
     </command>
-    <command id="0x06" name="AddNOC" response="NOCResponse">
+    <command id="0x06" name="AddNOC" direction="commandToServer" response="NOCResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform/>
-      <field id="0" name="NOCValue" type="ref_DataTypeOctstr">
+      <field id="0" name="NOCValue" type="octstr">
         <mandatoryConform/>
-        <constraint type="max" value="400"/>
+        <constraint type="maxLength" value="400"/>
       </field>
-      <field id="1" name="ICACValue" type="ref_DataTypeOctstr">
+      <field id="1" name="ICACValue" type="octstr">
         <optionalConform/>
-        <constraint type="max" value="400"/>
+        <constraint type="maxLength" value="400"/>
       </field>
-      <field id="2" name="IPKValue" type="ref_DataTypeOctstr">
+      <field id="2" name="IPKValue" type="octstr">
         <mandatoryConform/>
-        <constraint type="allowed" value="16"/>
+        <constraint type="maxLength" value="16"/>
       </field>
       <field id="3" name="CaseAdminSubject" type="SubjectID">
         <mandatoryConform/>
       </field>
-      <field id="4" name="AdminVendorId" type="ref_DataTypeVendorId">
+      <field id="4" name="AdminVendorId" type="vendor-id">
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x07" name="UpdateNOC" response="NOCResponse">
+    <command id="0x07" name="UpdateNOC" direction="commandToServer" response="NOCResponse">
       <access invokePrivilege="admin" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="NOCValue" type="octstr">
@@ -280,7 +284,6 @@
       </field>
     </command>
     <command id="0x08" name="NOCResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="StatusCode" type="NodeOperationalCertStatusEnum">
         <mandatoryConform/>
@@ -294,7 +297,7 @@
         <constraint type="maxLength" value="128"/>
       </field>
     </command>
-    <command id="0x09" name="UpdateFabricLabel" response="NOCResponse">
+    <command id="0x09" name="UpdateFabricLabel" direction="commandToServer" response="NOCResponse">
       <access invokePrivilege="admin" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="Label" type="string">
@@ -302,7 +305,7 @@
         <constraint type="maxLength" value="32"/>
       </field>
     </command>
-    <command id="0x0A" name="RemoveFabric" response="NOCResponse">
+    <command id="0x0A" name="RemoveFabric" direction="commandToServer" response="NOCResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform/>
       <field id="0" name="FabricIndex" type="fabric-idx">
@@ -310,12 +313,12 @@
         <constraint type="between" from="1" to="254"/>
       </field>
     </command>
-    <command id="0x0B" name="AddTrustedRootCertificate" response="Y">
+    <command id="0x0B" name="AddTrustedRootCertificate" direction="commandToServer" response="Y">
       <access invokePrivilege="admin"/>
       <mandatoryConform/>
-      <field id="0" name="RootCACertificate" type="ref_DataTypeOctstr">
+      <field id="0" name="RootCACertificate" type="octstr">
         <mandatoryConform/>
-        <constraint type="max" value="400"/>
+        <constraint type="maxLength" value="400"/>
       </field>
     </command>
   </commands>
diff --git a/data_model/clusters/OperationalState.xml b/data_model/clusters/OperationalState.xml
index dcb5753..0062b38 100644
--- a/data_model/clusters/OperationalState.xml
+++ b/data_model/clusters/OperationalState.xml
@@ -60,6 +60,9 @@
     <revision revision="1" summary="Initial release"/>
     <revision revision="2" summary="The Pause and Resume commands are usable in all compatible states. Define reserved ranges for base/derived clusters."/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0060" name="Operational State"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="OPSTATE" scope="Endpoint"/>
   <dataTypes>
     <enum name="OperationalStateEnum">
@@ -143,6 +146,53 @@
       <constraint type="desc"/>
     </attribute>
   </attributes>
+  <commands>
+    <command id="0x00" name="Pause" direction="commandToServer" response="OperationalCommandResponse">
+      <access invokePrivilege="operate"/>
+      <otherwiseConform>
+        <mandatoryConform>
+          <command name="Resume"/>
+        </mandatoryConform>
+        <optionalConform/>
+      </otherwiseConform>
+    </command>
+    <command id="0x01" name="Stop" direction="commandToServer" response="OperationalCommandResponse">
+      <access invokePrivilege="operate"/>
+      <otherwiseConform>
+        <mandatoryConform>
+          <command name="Start"/>
+        </mandatoryConform>
+        <optionalConform/>
+      </otherwiseConform>
+    </command>
+    <command id="0x02" name="Start" direction="commandToServer" response="OperationalCommandResponse">
+      <access invokePrivilege="operate"/>
+      <optionalConform/>
+    </command>
+    <command id="0x03" name="Resume" direction="commandToServer" response="OperationalCommandResponse">
+      <access invokePrivilege="operate"/>
+      <otherwiseConform>
+        <mandatoryConform>
+          <command name="Pause"/>
+        </mandatoryConform>
+        <optionalConform/>
+      </otherwiseConform>
+    </command>
+    <command id="0x04" name="OperationalCommandResponse" direction="responseFromServer">
+      <access invokePrivilege="operate"/>
+      <mandatoryConform>
+        <orTerm>
+          <command name="Pause"/>
+          <command name="Stop"/>
+          <command name="Start"/>
+          <command name="Resume"/>
+        </orTerm>
+      </mandatoryConform>
+      <field id="0" name="CommandResponseState" type="ErrorStateStruct">
+        <mandatoryConform/>
+      </field>
+    </command>
+  </commands>
   <events>
     <event id="0x00" name="OperationalError" priority="critical">
       <access readPrivilege="view"/>
diff --git a/data_model/clusters/OperationalState_Oven.xml b/data_model/clusters/OperationalState_Oven.xml
index 947e93f..c44ac37 100644
--- a/data_model/clusters/OperationalState_Oven.xml
+++ b/data_model/clusters/OperationalState_Oven.xml
@@ -54,10 +54,15 @@
 Connectivity Standards Alliance +

 508 Second Street, Suite 206 +

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0048" name="Oven Cavity Operational State" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0048" name="Oven Cavity Operational State"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Operational State" role="application" picsCode="OVENOPSTATE" scope="Endpoint"/>
 </cluster>
\ No newline at end of file
diff --git a/data_model/clusters/OperationalState_RVC.xml b/data_model/clusters/OperationalState_RVC.xml
index bc4e550..6426e26 100644
--- a/data_model/clusters/OperationalState_RVC.xml
+++ b/data_model/clusters/OperationalState_RVC.xml
@@ -54,32 +54,29 @@
 Connectivity Standards Alliance +

 508 Second Street, Suite 206 +

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0061" name="RVC Operational State" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial release"/>
     <revision revision="2" summary="The Pause and Resume commands are usable in all compatible states. Deprecate the Start and Stop commands. Add the GoHome command."/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0061" name="RVC Operational State"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Operational State" role="application" picsCode="RVCOPSTATE" scope="Endpoint"/>
   <commands>
-    <command id="0x00" name="Pause" direction="commandToClient">
-      <access invokePrivilege="operate"/>
-    </command>
-    <command id="0x01" name="Stop" direction="commandToClient">
-      <access invokePrivilege="operate"/>
+    <command id="0x00" name="Pause"/>
+    <command id="0x01" name="Stop">
       <deprecateConform/>
     </command>
-    <command id="0x02" name="Start" direction="commandToClient">
-      <access invokePrivilege="operate"/>
+    <command id="0x02" name="Start">
       <deprecateConform/>
     </command>
-    <command id="0x03" name="Resume" direction="commandToClient">
-      <access invokePrivilege="operate"/>
-    </command>
-    <command id="0x04" name="OperationalCommandResponse" direction="commandToClient">
-      <access invokePrivilege="operate"/>
-    </command>
-    <command id="0x80" name="GoHome" response="OperationalCommandResponse">
+    <command id="0x03" name="Resume"/>
+    <command id="0x04" name="OperationalCommandResponse"/>
+    <command id="0x80" name="GoHome" direction="commandToServer" response="OperationalCommandResponse">
       <access invokePrivilege="operate"/>
       <optionalConform/>
     </command>
diff --git a/data_model/clusters/PowerSourceCluster.xml b/data_model/clusters/PowerSourceCluster.xml
index 16d6f0a..ffd628d 100644
--- a/data_model/clusters/PowerSourceCluster.xml
+++ b/data_model/clusters/PowerSourceCluster.xml
@@ -61,6 +61,9 @@
     <revision revision="2" summary="Added EndpointList attribute that maps a power source to a list of endpoints"/>
     <revision revision="3" summary="Added features CHGM and DCHGM, related attributes (0x0020..0x002A) and related updates to enums"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x002F" name="Power Source"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="PS" scope="Node"/>
   <features>
     <feature bit="0" code="WIRED" name="Wired" summary="A wired power source">
@@ -911,13 +914,13 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x01" name="DisableBattery" response="Y">
+    <command id="0x01" name="DisableBattery" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="CHGM"/>
       </mandatoryConform>
     </command>
-    <command id="0x02" name="EnableBatteryCharging" response="Y">
+    <command id="0x02" name="EnableBatteryCharging" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="CHGM"/>
@@ -928,12 +931,14 @@
       </field>
       <field id="1" name="MinimumChargeCurrent" type="uint16">
         <mandatoryConform/>
+        <constraint type="allowed" value="6-32"/>
       </field>
       <field id="2" name="MaximumChargeCurrent" type="uint16">
         <mandatoryConform/>
+        <constraint type="allowed" value="6-32"/>
       </field>
     </command>
-    <command id="0x03" name="EnableBatteryDischarging" response="Y">
+    <command id="0x03" name="EnableBatteryDischarging" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="DCHGM"/>
@@ -944,9 +949,10 @@
       </field>
       <field id="1" name="MaximumDischargeCurrent" type="uint16">
         <mandatoryConform/>
+        <constraint type="allowed" value="6-32"/>
       </field>
     </command>
-    <command id="0x04" name="StartBatteryDiagnostics" response="Y">
+    <command id="0x04" name="StartBatteryDiagnostics" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <optionalConform/>
     </command>
@@ -957,13 +963,15 @@
       <optionalConform>
         <feature name="WIRED"/>
       </optionalConform>
-      <field id="0" name="Current" type="ref_DataTypeList[WiredFaultEnum Type]" default="empty">
+      <field id="0" name="Current" type="list" default="empty">
+        <entry type="WiredFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="8"/>
+        <constraint type="maxCount" value="8"/>
       </field>
-      <field id="1" name="Previous" type="ref_DataTypeList[WiredFaultEnum Type]" default="empty">
+      <field id="1" name="Previous" type="list" default="empty">
+        <entry type="WiredFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="8"/>
+        <constraint type="maxCount" value="8"/>
       </field>
     </event>
     <event id="0x01" name="BatFaultChange" priority="info">
@@ -971,13 +979,15 @@
       <optionalConform>
         <feature name="BAT"/>
       </optionalConform>
-      <field id="0" name="Current" type="ref_DataTypeList[BatFaultEnum Type]" default="empty">
+      <field id="0" name="Current" type="list" default="empty">
+        <entry type="BatFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="8"/>
+        <constraint type="maxCount" value="8"/>
       </field>
-      <field id="1" name="Previous" type="ref_DataTypeList[BatFaultEnum Type]" default="empty">
+      <field id="1" name="Previous" type="list" default="empty">
+        <entry type="BatFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="8"/>
+        <constraint type="maxCount" value="8"/>
       </field>
     </event>
     <event id="0x02" name="BatChargeFaultChange" priority="info">
@@ -985,13 +995,15 @@
       <optionalConform>
         <feature name="RECHG"/>
       </optionalConform>
-      <field id="0" name="Current" type="ref_DataTypeList[BatChargeFaultEnum Type]" default="empty">
+      <field id="0" name="Current" type="list" default="empty">
+        <entry type="BatChargeFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="16"/>
+        <constraint type="maxCount" value="16"/>
       </field>
-      <field id="1" name="Previous" type="ref_DataTypeList[BatChargeFaultEnum Type]" default="empty">
+      <field id="1" name="Previous" type="list" default="empty">
+        <entry type="BatChargeFaultEnum"/>
         <mandatoryConform/>
-        <constraint type="max" value="16"/>
+        <constraint type="maxCount" value="16"/>
       </field>
     </event>
     <event id="0x03" name="BatConnected" priority="info">
diff --git a/data_model/clusters/PowerSourceConfigurationCluster.xml b/data_model/clusters/PowerSourceConfigurationCluster.xml
index 5548bf6..11e3bd4 100644
--- a/data_model/clusters/PowerSourceConfigurationCluster.xml
+++ b/data_model/clusters/PowerSourceConfigurationCluster.xml
@@ -59,10 +59,13 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x002E" name="Power Source Configuration"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="PSCFG" scope="Node"/>
   <attributes>
     <attribute id="0x0000" name="Sources" type="list">
-      <entry type="ref_DataTypeEndpointNumber"/>
+      <entry type="endpoint-no"/>
       <access read="true" readPrivilege="view"/>
       <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
       <mandatoryConform/>
diff --git a/data_model/clusters/PowerTopology.xml b/data_model/clusters/PowerTopology.xml
index c8d90ba..d8c8a50 100644
--- a/data_model/clusters/PowerTopology.xml
+++ b/data_model/clusters/PowerTopology.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: short

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x009C" name="Power Topology" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x009C" name="Power Topology"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="PWRTL" scope="Endpoint"/>
   <features>
     <feature bit="0" code="NODE" name="NodeTopology" summary="This endpoint provides or consumes power to/from the entire node">
diff --git a/data_model/clusters/PressureMeasurement.xml b/data_model/clusters/PressureMeasurement.xml
index 7009348..d9c4a45 100644
--- a/data_model/clusters/PressureMeasurement.xml
+++ b/data_model/clusters/PressureMeasurement.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0403" name="Pressure Measurement" revision="3">
   <revisionHistory>
@@ -61,6 +63,9 @@
     <revision revision="2" summary="CCB 2241 2370"/>
     <revision revision="3" summary="New data model format and notation"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0403" name="Pressure Measurement"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="PRS" scope="Endpoint"/>
   <features>
     <feature bit="0" code="EXT" name="Extended" summary="Extended range and resolution">
diff --git a/data_model/clusters/PumpConfigurationControl.xml b/data_model/clusters/PumpConfigurationControl.xml
index f3fc98a..cfd2971 100644
--- a/data_model/clusters/PumpConfigurationControl.xml
+++ b/data_model/clusters/PumpConfigurationControl.xml
@@ -62,6 +62,9 @@
     <revision revision="3" summary="New data model format and notation, added additional events"/>
     <revision revision="4" summary="Added feature map"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0200" name="Pump Configuration and Control"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="PCC" scope="Endpoint"/>
   <features>
     <feature bit="0" code="PRSCONST" name="ConstantPressure" summary="Supports operating in constant pressure mode">
@@ -169,7 +172,206 @@
       </bitfield>
     </bitmap>
   </dataTypes>
-  <attributes/>
+  <attributes>
+    <attribute id="0x0000" name="MaxPressure" type="int16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform/>
+    </attribute>
+    <attribute id="0x0001" name="MaxSpeed" type="uint16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform/>
+    </attribute>
+    <attribute id="0x0002" name="MaxFlow" type="uint16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform/>
+    </attribute>
+    <attribute id="0x0003" name="MinConstPressure" type="int16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <otherwiseConform>
+        <mandatoryConform>
+          <feature name="PRSCONST"/>
+        </mandatoryConform>
+        <optionalConform>
+          <feature name="AUTO"/>
+        </optionalConform>
+      </otherwiseConform>
+    </attribute>
+    <attribute id="0x0004" name="MaxConstPressure" type="int16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <otherwiseConform>
+        <mandatoryConform>
+          <feature name="PRSCONST"/>
+        </mandatoryConform>
+        <optionalConform>
+          <feature name="AUTO"/>
+        </optionalConform>
+      </otherwiseConform>
+    </attribute>
+    <attribute id="0x0005" name="MinCompPressure" type="int16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <otherwiseConform>
+        <mandatoryConform>
+          <feature name="PRSCOMP"/>
+        </mandatoryConform>
+        <optionalConform>
+          <feature name="AUTO"/>
+        </optionalConform>
+      </otherwiseConform>
+    </attribute>
+    <attribute id="0x0006" name="MaxCompPressure" type="int16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <otherwiseConform>
+        <mandatoryConform>
+          <feature name="PRSCOMP"/>
+        </mandatoryConform>
+        <optionalConform>
+          <feature name="AUTO"/>
+        </optionalConform>
+      </otherwiseConform>
+    </attribute>
+    <attribute id="0x0007" name="MinConstSpeed" type="uint16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <otherwiseConform>
+        <mandatoryConform>
+          <feature name="SPD"/>
+        </mandatoryConform>
+        <optionalConform>
+          <feature name="AUTO"/>
+        </optionalConform>
+      </otherwiseConform>
+    </attribute>
+    <attribute id="0x0008" name="MaxConstSpeed" type="uint16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <otherwiseConform>
+        <mandatoryConform>
+          <feature name="SPD"/>
+        </mandatoryConform>
+        <optionalConform>
+          <feature name="AUTO"/>
+        </optionalConform>
+      </otherwiseConform>
+    </attribute>
+    <attribute id="0x0009" name="MinConstFlow" type="uint16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <otherwiseConform>
+        <mandatoryConform>
+          <feature name="FLW"/>
+        </mandatoryConform>
+        <optionalConform>
+          <feature name="AUTO"/>
+        </optionalConform>
+      </otherwiseConform>
+    </attribute>
+    <attribute id="0x000A" name="MaxConstFlow" type="uint16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <otherwiseConform>
+        <mandatoryConform>
+          <feature name="FLW"/>
+        </mandatoryConform>
+        <optionalConform>
+          <feature name="AUTO"/>
+        </optionalConform>
+      </otherwiseConform>
+    </attribute>
+    <attribute id="0x000B" name="MinConstTemp" type="int16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <otherwiseConform>
+        <mandatoryConform>
+          <feature name="TEMP"/>
+        </mandatoryConform>
+        <optionalConform>
+          <feature name="AUTO"/>
+        </optionalConform>
+      </otherwiseConform>
+      <constraint type="min" value="-27315"/>
+    </attribute>
+    <attribute id="0x000C" name="MaxConstTemp" type="int16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <otherwiseConform>
+        <mandatoryConform>
+          <feature name="TEMP"/>
+        </mandatoryConform>
+        <optionalConform>
+          <feature name="AUTO"/>
+        </optionalConform>
+      </otherwiseConform>
+      <constraint type="min" value="-27315"/>
+    </attribute>
+    <attribute id="0x0010" name="PumpStatus" type="PumpStatusBitmap" default="0">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="volatile" reportable="true"/>
+      <optionalConform/>
+      <constraint type="desc"/>
+    </attribute>
+    <attribute id="0x0011" name="EffectiveOperationMode" type="OperationModeEnum" default="desc">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
+      <mandatoryConform/>
+      <constraint type="desc"/>
+    </attribute>
+    <attribute id="0x0012" name="EffectiveControlMode" type="ControlModeEnum" default="desc">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
+      <mandatoryConform/>
+      <constraint type="desc"/>
+    </attribute>
+    <attribute id="0x0013" name="Capacity" type="int16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="true"/>
+      <mandatoryConform/>
+    </attribute>
+    <attribute id="0x0014" name="Speed" type="uint16" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
+      <optionalConform/>
+    </attribute>
+    <attribute id="0x0015" name="LifetimeRunningHours" type="uint24" default="0">
+      <access read="true" write="true" readPrivilege="view" writePrivilege="manage"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="nonVolatile" reportable="false"/>
+      <optionalConform/>
+    </attribute>
+    <attribute id="0x0016" name="Power" type="uint24" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="volatile" reportable="false"/>
+      <optionalConform/>
+    </attribute>
+    <attribute id="0x0017" name="LifetimeEnergyConsumed" type="uint32" default="0">
+      <access read="true" write="true" readPrivilege="view" writePrivilege="manage"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="nonVolatile" reportable="false"/>
+      <optionalConform/>
+    </attribute>
+    <attribute id="0x0020" name="OperationMode" type="OperationModeEnum" default="0">
+      <access read="true" write="true" readPrivilege="view" writePrivilege="manage"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
+      <mandatoryConform/>
+      <constraint type="desc"/>
+    </attribute>
+    <attribute id="0x0021" name="ControlMode" type="ControlModeEnum" default="0">
+      <access read="true" write="true" readPrivilege="view" writePrivilege="manage"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
+      <optionalConform/>
+      <constraint type="desc"/>
+    </attribute>
+    <attribute id="0x0022" name="AlarmMask" type="map16" default="0">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
+      <deprecateConform/>
+      <constraint type="desc"/>
+    </attribute>
+  </attributes>
   <events>
     <event id="0x00" name="SupplyVoltageLow" priority="info">
       <access readPrivilege="view"/>
diff --git a/data_model/clusters/RefrigeratorAlarm.xml b/data_model/clusters/RefrigeratorAlarm.xml
index c987c38..caad94d 100644
--- a/data_model/clusters/RefrigeratorAlarm.xml
+++ b/data_model/clusters/RefrigeratorAlarm.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: short

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0057" name="Refrigerator Alarm" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial revision"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0057" name="Refrigerator Alarm"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Alarm Base" role="application" picsCode="REFALM" scope="Endpoint"/>
   <features>
     <feature bit="0" code="RESET" name="Reset" summary="Supports the ability to reset alarms">
@@ -73,8 +78,7 @@
     </bitmap>
   </dataTypes>
   <commands>
-    <command id="0x01" name="ModifyEnabledAlarms" direction="commandToClient">
-      <access invokePrivilege="operate"/>
+    <command id="0x01" name="ModifyEnabledAlarms">
       <disallowConform/>
     </command>
   </commands>
diff --git a/data_model/clusters/ResourceMonitoring.xml b/data_model/clusters/ResourceMonitoring.xml
index 17fc755..6b0e8f3 100644
--- a/data_model/clusters/ResourceMonitoring.xml
+++ b/data_model/clusters/ResourceMonitoring.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Resource Monitoring Clusters" revision="1">
   <revisionHistory>
@@ -164,7 +166,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="ResetCondition" response="Y">
+    <command id="0x00" name="ResetCondition" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <optionalConform/>
     </command>
diff --git a/data_model/clusters/Scenes.xml b/data_model/clusters/Scenes.xml
index 0c4347c..5d9be30 100644
--- a/data_model/clusters/Scenes.xml
+++ b/data_model/clusters/Scenes.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0062" name="Scenes Management" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Based on the ZCL Scenes Cluster, Updated the Cluster ID to 0x0062, the name to Scenes Management, removed the provisional status; Removed attributes SceneCount, CurrentScene, CurrentGroup, SceneValid, and NameSupport; Removed Explicit, TableSize and FabricScenes features; Removed EnhancedAddScene, EnhancedAddSceneResponse, EnhancedViewScene, EnhancedViewSceneResponse; TransitionTime field changed milliseconds in AddScene, ViewSceneResponse and RecallScene"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0062" name="Scenes Management"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="S" scope="Endpoint"/>
   <features>
     <feature bit="0" code="SN" name="SceneNames" summary="The ability to store a name for a scene.">
@@ -116,17 +121,14 @@
       </field>
       <field id="1" name="SceneID" type="uint8">
         <mandatoryConform/>
-        <constraint type="max" value="254"/>
       </field>
       <field id="2" name="SceneName" type="string">
         <mandatoryConform>
           <feature name="SN"/>
         </mandatoryConform>
-        <constraint type="maxLength" value="16"/>
       </field>
       <field id="3" name="SceneTransitionTime" type="uint32" default="0">
         <mandatoryConform/>
-        <constraint type="max" value="6000000"/>
       </field>
       <field id="4" name="ExtensionFields" type="list" default="empty">
         <entry type="ExtensionFieldSetStruct"/>
@@ -177,7 +179,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="AddScene" response="AddSceneResponse">
+    <command id="0x00" name="AddScene" direction="commandToServer" response="AddSceneResponse">
       <access invokePrivilege="manage" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupID" type="group-id">
@@ -189,7 +191,7 @@
       </field>
       <field id="2" name="TransitionTime" type="uint32">
         <mandatoryConform/>
-        <constraint type="max" value="6000000"/>
+        <constraint type="max" value="60000000"/>
       </field>
       <field id="3" name="SceneName" type="string">
         <mandatoryConform/>
@@ -202,7 +204,6 @@
       </field>
     </command>
     <command id="0x00" name="AddSceneResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="status">
         <mandatoryConform/>
@@ -216,7 +217,7 @@
         <constraint type="max" value="254"/>
       </field>
     </command>
-    <command id="0x01" name="ViewScene" response="ViewSceneResponse">
+    <command id="0x01" name="ViewScene" direction="commandToServer" response="ViewSceneResponse">
       <access invokePrivilege="operate" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupID" type="group-id">
@@ -228,7 +229,6 @@
       </field>
     </command>
     <command id="0x01" name="ViewSceneResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="status">
         <mandatoryConform/>
@@ -242,7 +242,7 @@
         <constraint type="max" value="254"/>
       </field>
       <field id="3" name="TransitionTime" type="uint32">
-        <constraint type="max" value="6000000"/>
+        <constraint type="max" value="60000000"/>
       </field>
       <field id="4" name="SceneName" type="string">
         <constraint type="maxLength" value="16"/>
@@ -251,7 +251,7 @@
         <entry type="ExtensionFieldSetStruct"/>
       </field>
     </command>
-    <command id="0x02" name="RemoveScene" response="RemoveSceneResponse">
+    <command id="0x02" name="RemoveScene" direction="commandToServer" response="RemoveSceneResponse">
       <access invokePrivilege="manage" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupID" type="group-id">
@@ -263,7 +263,6 @@
       </field>
     </command>
     <command id="0x02" name="RemoveSceneResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="status">
         <mandatoryConform/>
@@ -277,7 +276,7 @@
         <constraint type="max" value="254"/>
       </field>
     </command>
-    <command id="0x03" name="RemoveAllScenes" response="RemoveAllScenesResponse">
+    <command id="0x03" name="RemoveAllScenes" direction="commandToServer" response="RemoveAllScenesResponse">
       <access invokePrivilege="manage" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupID" type="group-id">
@@ -285,7 +284,6 @@
       </field>
     </command>
     <command id="0x03" name="RemoveAllScenesResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="status">
         <mandatoryConform/>
@@ -295,7 +293,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x04" name="StoreScene" response="StoreSceneResponse">
+    <command id="0x04" name="StoreScene" direction="commandToServer" response="StoreSceneResponse">
       <access invokePrivilege="manage" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupID" type="group-id">
@@ -307,7 +305,6 @@
       </field>
     </command>
     <command id="0x04" name="StoreSceneResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="status">
         <mandatoryConform/>
@@ -321,7 +318,7 @@
         <constraint type="max" value="254"/>
       </field>
     </command>
-    <command id="0x05" name="RecallScene" response="Y">
+    <command id="0x05" name="RecallScene" direction="commandToServer" response="Y">
       <access invokePrivilege="operate" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupID" type="group-id">
@@ -337,7 +334,7 @@
         <constraint type="max" value="60000000"/>
       </field>
     </command>
-    <command id="0x06" name="GetSceneMembership" response="GetSceneMembershipResponse">
+    <command id="0x06" name="GetSceneMembership" direction="commandToServer" response="GetSceneMembershipResponse">
       <access invokePrivilege="operate" fabricScoped="true"/>
       <mandatoryConform/>
       <field id="0" name="GroupID" type="group-id">
@@ -345,7 +342,6 @@
       </field>
     </command>
     <command id="0x06" name="GetSceneMembershipResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="status">
         <mandatoryConform/>
@@ -362,7 +358,7 @@
         <entry type="uint8"/>
       </field>
     </command>
-    <command id="0x40" name="CopyScene" response="CopySceneResponse">
+    <command id="0x40" name="CopyScene" direction="commandToServer" response="CopySceneResponse">
       <access invokePrivilege="manage" fabricScoped="true"/>
       <optionalConform/>
       <field id="0" name="Mode" type="CopyModeBitmap">
@@ -383,9 +379,8 @@
       </field>
     </command>
     <command id="0x40" name="CopySceneResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
-        <attribute name="CopyScene"/>
+        <command name="CopyScene"/>
       </mandatoryConform>
       <field id="0" name="Status" type="status">
         <mandatoryConform/>
diff --git a/data_model/clusters/SmokeCOAlarm.xml b/data_model/clusters/SmokeCOAlarm.xml
index 0db5c78..d3d35f1 100644
--- a/data_model/clusters/SmokeCOAlarm.xml
+++ b/data_model/clusters/SmokeCOAlarm.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x005C" name="Smoke CO Alarm" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x005C" name="Smoke CO Alarm"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="SMOKECO" scope="Endpoint"/>
   <features>
     <feature bit="0" code="SMOKE" name="SmokeAlarm" summary="Supports Smoke alarm">
@@ -226,7 +231,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="SelfTestRequest" response="Y">
+    <command id="0x00" name="SelfTestRequest" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <optionalConform/>
     </command>
diff --git a/data_model/clusters/Switch.xml b/data_model/clusters/Switch.xml
index 30602c3..e717004 100644
--- a/data_model/clusters/Switch.xml
+++ b/data_model/clusters/Switch.xml
@@ -59,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x003B" name="Switch"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="SWTCH" scope="Endpoint"/>
   <features>
     <feature bit="0" code="LS" name="LatchingSwitch" summary="Switch is latching">
diff --git a/data_model/clusters/TargetNavigator.xml b/data_model/clusters/TargetNavigator.xml
index 343f142..cfb3a0c 100644
--- a/data_model/clusters/TargetNavigator.xml
+++ b/data_model/clusters/TargetNavigator.xml
@@ -54,11 +54,17 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0505" name="Target Navigator" revision="1">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0505" name="Target Navigator" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
+    <revision revision="2" summary="Add TargetUpdated event"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0505" name="Target Navigator"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="TGTNAV" scope="Endpoint"/>
   <dataTypes>
     <enum name="StatusEnum">
@@ -95,7 +101,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="NavigateTarget" response="NavigateTargetResponse">
+    <command id="0x00" name="NavigateTarget" direction="commandToServer" response="NavigateTargetResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Target" type="uint8">
@@ -106,7 +112,6 @@
       </field>
     </command>
     <command id="0x01" name="NavigateTargetResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Status" type="StatusEnum">
         <mandatoryConform/>
@@ -116,4 +121,22 @@
       </field>
     </command>
   </commands>
+  <events>
+    <event id="0x00" name="TargetUpdated" priority="info">
+      <access readPrivilege="view"/>
+      <optionalConform/>
+      <field id="0" name="TargetList" type="list">
+        <entry type="TargetInfoStruct"/>
+        <optionalConform/>
+      </field>
+      <field id="1" name="CurrentTarget" type="uint8" default="0xFF">
+        <optionalConform/>
+        <constraint type="desc"/>
+      </field>
+      <field id="2" name="Data" type="octstr">
+        <optionalConform/>
+        <constraint type="maxLength" value="900"/>
+      </field>
+    </event>
+  </events>
 </cluster>
\ No newline at end of file
diff --git a/data_model/clusters/TemperatureControl.xml b/data_model/clusters/TemperatureControl.xml
index f457238..70fc100 100644
--- a/data_model/clusters/TemperatureControl.xml
+++ b/data_model/clusters/TemperatureControl.xml
@@ -59,6 +59,9 @@
   <revisionHistory>
     <revision revision="1" summary="Initial release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0056" name="Temperature Control"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="TCTL" scope="Endpoint"/>
   <features>
     <feature bit="0" code="TN" name="TemperatureNumber" summary="Use actual temperature numbers">
@@ -73,9 +76,58 @@
       </optionalConform>
     </feature>
   </features>
-  <attributes/>
+  <attributes>
+    <attribute id="0x0000" name="TemperatureSetpoint" type="temperature">
+      <access read="true" readPrivilege="view"/>
+      <mandatoryConform>
+        <feature name="TN"/>
+      </mandatoryConform>
+      <constraint type="between" from="MinTemperature" to="MaxTemperature"/>
+    </attribute>
+    <attribute id="0x0001" name="MinTemperature" type="temperature">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="TN"/>
+      </mandatoryConform>
+      <constraint type="max" value="MaxTemperature - 1"/>
+    </attribute>
+    <attribute id="0x0002" name="MaxTemperature" type="temperature">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="TN"/>
+      </mandatoryConform>
+      <constraint type="desc"/>
+    </attribute>
+    <attribute id="0x0003" name="Step" type="temperature">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="STEP"/>
+      </mandatoryConform>
+      <constraint type="max" value="MaxTemperature - MinTemperature"/>
+    </attribute>
+    <attribute id="0x0004" name="SelectedTemperatureLevel" type="uint8">
+      <access read="true" readPrivilege="view"/>
+      <mandatoryConform>
+        <feature name="TL"/>
+      </mandatoryConform>
+      <constraint type="between" from="0" to="31"/>
+    </attribute>
+    <attribute id="0x0005" name="SupportedTemperatureLevels" type="list">
+      <entry type="string">
+        <constraint type="maxLength" value="16"/>
+      </entry>
+      <access read="true" readPrivilege="view"/>
+      <mandatoryConform>
+        <feature name="TL"/>
+      </mandatoryConform>
+      <constraint type="maxCount" value="32"/>
+    </attribute>
+  </attributes>
   <commands>
-    <command id="0x00" name="SetTemperature" response="Y">
+    <command id="0x00" name="SetTemperature" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="TargetTemperature" type="temperature">
diff --git a/data_model/clusters/TemperatureMeasurement.xml b/data_model/clusters/TemperatureMeasurement.xml
index e1603fd..540af82 100644
--- a/data_model/clusters/TemperatureMeasurement.xml
+++ b/data_model/clusters/TemperatureMeasurement.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0402" name="Temperature Measurement" revision="4">
   <revisionHistory>
@@ -62,6 +64,9 @@
     <revision revision="3" summary="CCB 2823"/>
     <revision revision="4" summary="New data model format and notation"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0402" name="Temperature Measurement"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="TMP" scope="Endpoint"/>
   <attributes>
     <attribute id="0x0000" name="MeasuredValue" type="temperature">
diff --git a/data_model/clusters/Thermostat.xml b/data_model/clusters/Thermostat.xml
index 400d55a..756e279 100644
--- a/data_model/clusters/Thermostat.xml
+++ b/data_model/clusters/Thermostat.xml
@@ -55,7 +55,7 @@
 508 Second Street, Suite 206

 Davis, CA 95616, USA

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0201" name="Thermostat" revision="6">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0201" name="Thermostat" revision="7">
   <revisionHistory>
     <revision revision="1" summary="Mandatory global ClusterRevision attribute added; fixed some defaults; CCB 1823, 1480"/>
     <revision revision="2" summary="CCB 1981 2186 2249 2250 2251; NFR Thermostat Setback"/>
@@ -63,7 +63,11 @@
     <revision revision="4" summary="All Hubs changes"/>
     <revision revision="5" summary="New data model format and notation, added FeatureMap, collapsed attribute sets, clarified edge cases around limits, default value of xxxSetpointLimit now respects AbsxxxSetpointLimit"/>
     <revision revision="6" summary="Introduced the LTNE feature and adapted text (spec issue #5778)"/>
+    <revision revision="7" summary="Introduced the Presets and Matter Schedules features"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0201" name="Thermostat"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="TSTAT" scope="Endpoint"/>
   <features>
     <feature bit="0" code="HEAT" name="Heating" summary="Thermostat is capable of managing a heating device">
@@ -102,6 +106,17 @@
     <feature bit="6" code="LTNE" name="LocalTemperatureNotExposed" summary="Thermostat does not expose the LocalTemperature Value in the LocalTemperature attribute">
       <optionalConform/>
     </feature>
+    <feature bit="7" code="MSCH" name="MatterScheduleConfiguration" summary="Supports enhanced schedules">
+      <optionalConform/>
+    </feature>
+    <feature bit="8" code="PRES" name="Presets" summary="Thermostat supports setpoint presets">
+      <optionalConform/>
+    </feature>
+    <feature bit="9" code="QDPRES" name="QueuedPresetsSupported" summary="Thermostat supports queued Presets with a delay">
+      <optionalConform>
+        <feature name="PRES"/>
+      </optionalConform>
+    </feature>
   </features>
   <dataTypes>
     <number name="SignedTemperature" type=""/>
@@ -212,13 +227,36 @@
         </optionalConform>
       </item>
     </enum>
+    <enum name="PresetScenarioEnum">
+      <item value="1" name="Occupied" summary="The thermostat-controlled area is occupied">
+        <mandatoryConform/>
+      </item>
+      <item value="2" name="Unoccupied" summary="The thermostat-controlled area is unoccupied">
+        <mandatoryConform/>
+      </item>
+      <item value="3" name="Sleep" summary="Users are likely to be sleeping">
+        <mandatoryConform/>
+      </item>
+      <item value="4" name="Wake" summary="Users are likely to be waking up">
+        <mandatoryConform/>
+      </item>
+      <item value="5" name="Vacation" summary="Users are on vacation">
+        <mandatoryConform/>
+      </item>
+      <item value="6" name="UserDefined" summary="Custom presets">
+        <mandatoryConform/>
+      </item>
+    </enum>
     <enum name="SetpointChangeSourceEnum">
       <item value="0" name="Manual" summary="Manual, user-initiated setpoint change via the thermostat">
         <optionalConform/>
       </item>
       <item value="1" name="Schedule" summary="Schedule/internal programming-initiated setpoint change">
         <optionalConform>
-          <feature name="SCH"/>
+          <orTerm>
+            <feature name="SCH"/>
+            <feature name="MSCH"/>
+          </orTerm>
         </optionalConform>
       </item>
       <item value="2" name="External" summary="Externally-initiated setpoint change (e.g., DRLC cluster command, attribute write)">
@@ -297,7 +335,7 @@
           <feature name="COOL"/>
         </optionalConform>
       </item>
-      <item value="7" name="Fan">
+      <item value="7" name="FanOnly">
         <optionalConform/>
       </item>
       <item value="8" name="Dry">
@@ -372,6 +410,14 @@
         <mandatoryConform/>
       </bitfield>
     </bitmap>
+    <bitmap name="PresetTypeFeaturesBitmap">
+      <bitfield name="Automatic" bit="0" summary="Preset may be automatically activated by the thermostat">
+        <mandatoryConform/>
+      </bitfield>
+      <bitfield name="SupportsNames" bit="1" summary="Preset supports user-provided names">
+        <mandatoryConform/>
+      </bitfield>
+    </bitmap>
     <bitmap name="ProgrammingOperationModeBitmap">
       <bitfield name="ScheduleActive" bit="0" summary="Schedule programming mode. This enables any programmed weekly schedule configurations.">
         <mandatoryConform/>
@@ -451,6 +497,149 @@
         <mandatoryConform/>
       </bitfield>
     </bitmap>
+    <bitmap name="ScheduleTypeFeaturesBitmap">
+      <bitfield name="SupportsPresets" bit="0" summary="Supports presets">
+        <optionalConform choice="a" more="true">
+          <feature name="PRES"/>
+        </optionalConform>
+      </bitfield>
+      <bitfield name="SupportsSetpoints" bit="1" summary="Supports setpoints">
+        <optionalConform choice="a" more="true"/>
+      </bitfield>
+      <bitfield name="SupportsNames" bit="2" summary="Supports user-provided names">
+        <optionalConform/>
+      </bitfield>
+      <bitfield name="SupportsOff" bit="3" summary="Supports transitioning to SystemModeOff">
+        <optionalConform/>
+      </bitfield>
+    </bitmap>
+    <struct name="PresetStruct">
+      <field id="0" name="PresetHandle" type="octstr">
+        <quality nullable="true"/>
+        <mandatoryConform/>
+        <constraint type="maxLength" value="16"/>
+      </field>
+      <field id="1" name="PresetScenario" type="PresetScenarioEnum">
+        <mandatoryConform/>
+      </field>
+      <field id="2" name="Name" type="string" default="null">
+        <quality nullable="true"/>
+        <optionalConform/>
+        <constraint type="maxLength" value="64"/>
+      </field>
+      <field id="3" name="CoolingSetpoint" type="temperature" default="26°C">
+        <mandatoryConform>
+          <feature name="COOL"/>
+        </mandatoryConform>
+        <constraint type="desc"/>
+      </field>
+      <field id="4" name="HeatingSetpoint" type="temperature" default="20°C">
+        <mandatoryConform>
+          <feature name="HEAT"/>
+        </mandatoryConform>
+        <constraint type="desc"/>
+      </field>
+      <field id="5" name="BuiltIn" type="bool" default="false">
+        <quality nullable="true"/>
+        <mandatoryConform/>
+      </field>
+    </struct>
+    <struct name="PresetTypeStruct">
+      <field id="0" name="PresetScenario" type="PresetScenarioEnum">
+        <mandatoryConform/>
+      </field>
+      <field id="1" name="NumberOfPresets" type="uint8" default="0">
+        <mandatoryConform/>
+      </field>
+      <field id="2" name="PresetTypeFeatures" type="PresetTypeFeaturesBitmap" default="0">
+        <mandatoryConform/>
+      </field>
+    </struct>
+    <struct name="QueuedPresetStruct">
+      <field id="0" name="PresetHandle" type="octstr">
+        <quality nullable="true"/>
+        <mandatoryConform/>
+        <constraint type="maxLength" value="16"/>
+      </field>
+      <field id="1" name="TransitionTimestamp" type="utc" default="null">
+        <quality nullable="true"/>
+        <mandatoryConform/>
+      </field>
+    </struct>
+    <struct name="ScheduleStruct">
+      <field id="0" name="ScheduleHandle" type="octstr">
+        <quality nullable="true"/>
+        <mandatoryConform/>
+        <constraint type="maxLength" value="16"/>
+      </field>
+      <field id="1" name="SystemMode" type="SystemModeEnum">
+        <mandatoryConform/>
+        <constraint type="desc"/>
+      </field>
+      <field id="2" name="Name" type="string">
+        <optionalConform/>
+        <constraint type="maxLength" value="64"/>
+      </field>
+      <field id="3" name="PresetHandle" type="octstr">
+        <optionalConform/>
+        <constraint type="maxLength" value="16"/>
+      </field>
+      <field id="4" name="Transitions" type="list" default="empty">
+        <entry type="ScheduleTransitionStruct"/>
+        <mandatoryConform/>
+        <constraint type="countBetween" from="1" to="NumberOfScheduleTransitions Attribute"/>
+      </field>
+      <field id="5" name="BuiltIn" type="bool" default="false">
+        <quality nullable="true"/>
+        <mandatoryConform/>
+      </field>
+    </struct>
+    <struct name="ScheduleTransitionStruct">
+      <field id="0" name="DayOfWeek" type="ScheduleDayOfWeekBitmap">
+        <mandatoryConform/>
+        <constraint type="desc"/>
+      </field>
+      <field id="1" name="TransitionTime" type="uint16">
+        <mandatoryConform/>
+        <constraint type="between" from="0" to="1439"/>
+      </field>
+      <field id="2" name="PresetHandle" type="octstr">
+        <optionalConform>
+          <feature name="PRES"/>
+        </optionalConform>
+        <constraint type="maxLength" value="16"/>
+      </field>
+      <field id="3" name="SystemMode" type="SystemModeEnum">
+        <optionalConform/>
+        <constraint type="desc"/>
+      </field>
+      <field id="4" name="CoolingSetpoint" type="temperature">
+        <optionalConform>
+          <feature name="COOL"/>
+        </optionalConform>
+        <constraint type="desc"/>
+      </field>
+      <field id="5" name="HeatingSetpoint" type="temperature">
+        <optionalConform>
+          <feature name="HEAT"/>
+        </optionalConform>
+        <constraint type="desc"/>
+      </field>
+    </struct>
+    <struct name="ScheduleTypeStruct">
+      <field id="0" name="SystemMode" type="SystemModeEnum">
+        <mandatoryConform/>
+        <constraint type="desc"/>
+      </field>
+      <field id="1" name="NumberOfSchedules" type="uint8" default="0">
+        <mandatoryConform/>
+        <constraint type="max" value="NumberOfSchedules Attribute"/>
+      </field>
+      <field id="2" name="ScheduleTypeFeatures" type="ScheduleTypeFeaturesBitmap" default="0">
+        <mandatoryConform/>
+        <constraint type="desc"/>
+      </field>
+    </struct>
     <struct name="WeeklyScheduleTransitionStruct">
       <field id="0" name="TransitionTime" type="uint16">
         <mandatoryConform/>
@@ -823,9 +1012,110 @@
       <optionalConform/>
       <constraint type="desc"/>
     </attribute>
+    <attribute id="0x0048" name="PresetTypes" type="list" default="MS">
+      <entry type="PresetTypeStruct"/>
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="PRES"/>
+      </mandatoryConform>
+      <constraint type="desc"/>
+    </attribute>
+    <attribute id="0x0049" name="ScheduleTypes" type="list" default="MS">
+      <entry type="ScheduleTypeStruct"/>
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="MSCH"/>
+      </mandatoryConform>
+      <constraint type="desc"/>
+    </attribute>
+    <attribute id="0x004A" name="NumberOfPresets" type="uint8" default="0">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="PRES"/>
+      </mandatoryConform>
+    </attribute>
+    <attribute id="0x004B" name="NumberOfSchedules" type="uint8" default="0">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="MSCH"/>
+      </mandatoryConform>
+    </attribute>
+    <attribute id="0x004C" name="NumberOfScheduleTransitions" type="uint8" default="0">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="MSCH"/>
+      </mandatoryConform>
+    </attribute>
+    <attribute id="0x004D" name="NumberOfScheduleTransitionPerDay" type="uint8" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="fixed" reportable="false"/>
+      <mandatoryConform>
+        <feature name="MSCH"/>
+      </mandatoryConform>
+    </attribute>
+    <attribute id="0x004E" name="ActivePresetHandle" type="octstr" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="true" persistence="nonVolatile" reportable="false"/>
+      <mandatoryConform>
+        <feature name="PRES"/>
+      </mandatoryConform>
+      <constraint type="maxLength" value="16"/>
+    </attribute>
+    <attribute id="0x004F" name="ActiveScheduleHandle" type="octstr" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="true" persistence="nonVolatile" reportable="false"/>
+      <mandatoryConform>
+        <feature name="MSCH"/>
+      </mandatoryConform>
+      <constraint type="maxLength" value="16"/>
+    </attribute>
+    <attribute id="0x0050" name="Presets" type="list" default="empty">
+      <entry type="PresetStruct"/>
+      <access read="true" write="true" readPrivilege="view" writePrivilege="manage"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
+      <mandatoryConform>
+        <feature name="PRES"/>
+      </mandatoryConform>
+      <constraint type="maxCount" value="NumberOfPresets"/>
+    </attribute>
+    <attribute id="0x0051" name="Schedules" type="list" default="empty">
+      <entry type="ScheduleStruct"/>
+      <access read="true" write="true" readPrivilege="view" writePrivilege="manage"/>
+      <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
+      <mandatoryConform>
+        <feature name="MSCH"/>
+      </mandatoryConform>
+      <constraint type="desc"/>
+    </attribute>
+    <attribute id="0x0052" name="PresetsSchedulesEditable" type="bool" default="false">
+      <access read="true" readPrivilege="view"/>
+      <mandatoryConform>
+        <orTerm>
+          <feature name="MSCH"/>
+          <feature name="PRES"/>
+        </orTerm>
+      </mandatoryConform>
+    </attribute>
+    <attribute id="0x0053" name="SetpointHoldExpiryTimestamp" type="utc" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="nonVolatile" reportable="false"/>
+      <optionalConform/>
+    </attribute>
+    <attribute id="0x0054" name="QueuedPreset" type="QueuedPresetStruct" default="null">
+      <access read="true" readPrivilege="view"/>
+      <quality changeOmitted="false" nullable="true" scene="false" persistence="nonVolatile" reportable="false"/>
+      <mandatoryConform>
+        <feature name="QDPRES"/>
+      </mandatoryConform>
+    </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="SetpointRaiseLower" response="Y">
+    <command id="0x00" name="SetpointRaiseLower" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="Mode" type="SetpointRaiseLowerModeEnum">
@@ -837,7 +1127,6 @@
       </field>
     </command>
     <command id="0x00" name="GetWeeklyScheduleResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="SCH"/>
       </mandatoryConform>
@@ -858,7 +1147,7 @@
         <constraint type="maxCount" value="10"/>
       </field>
     </command>
-    <command id="0x01" name="SetWeeklySchedule" response="Y">
+    <command id="0x01" name="SetWeeklySchedule" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="SCH"/>
@@ -881,9 +1170,8 @@
       </field>
     </command>
     <command id="0x01" name="GetRelayStatusLogResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform>
-        <attribute name="GetRelayStatusLog"/>
+        <command name="GetRelayStatusLog"/>
       </mandatoryConform>
       <field id="0" name="TimeOfDay" type="uint16">
         <mandatoryConform/>
@@ -909,7 +1197,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x02" name="GetWeeklySchedule" response="GetWeeklyScheduleResponse">
+    <command id="0x02" name="GetWeeklySchedule" direction="commandToServer" response="GetWeeklyScheduleResponse">
       <access invokePrivilege="operate"/>
       <mandatoryConform>
         <feature name="SCH"/>
@@ -923,17 +1211,79 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x03" name="ClearWeeklySchedule" response="Y">
+    <command id="0x03" name="ClearWeeklySchedule" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform>
         <feature name="SCH"/>
       </mandatoryConform>
     </command>
-    <command id="0x04" name="GetRelayStatusLog" response="GetRelayStatusLogResponse">
+    <command id="0x04" name="GetRelayStatusLog" direction="commandToServer" response="GetRelayStatusLogResponse">
       <access invokePrivilege="operate"/>
       <optionalConform>
         <condition name="Zigbee"/>
       </optionalConform>
     </command>
+    <command id="0x05" name="SetActiveScheduleRequest" direction="commandToServer" response="Y">
+      <access invokePrivilege="operate"/>
+      <mandatoryConform>
+        <feature name="MSCH"/>
+      </mandatoryConform>
+      <field id="0" name="ScheduleHandle" type="octstr">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="16"/>
+      </field>
+    </command>
+    <command id="0x06" name="SetActivePresetRequest" direction="commandToServer" response="Y">
+      <access invokePrivilege="operate"/>
+      <mandatoryConform>
+        <feature name="PRES"/>
+      </mandatoryConform>
+      <field id="0" name="PresetHandle" type="octstr">
+        <mandatoryConform/>
+        <constraint type="maxLength" value="16"/>
+      </field>
+      <field id="1" name="DelayMinutes" type="uint16" default="0">
+        <optionalConform>
+          <feature name="QDPRES"/>
+        </optionalConform>
+      </field>
+    </command>
+    <command id="0x07" name="StartPresetsSchedulesEditRequest" direction="commandToServer" response="Y">
+      <access invokePrivilege="manage"/>
+      <mandatoryConform>
+        <orTerm>
+          <feature name="MSCH"/>
+          <feature name="PRES"/>
+        </orTerm>
+      </mandatoryConform>
+      <field id="0" name="TimeoutSeconds" type="uint16">
+        <mandatoryConform/>
+        <constraint type="max" value="120"/>
+      </field>
+    </command>
+    <command id="0x08" name="CancelPresetsSchedulesEditRequest" direction="commandToServer" response="Y">
+      <access invokePrivilege="manage"/>
+      <mandatoryConform>
+        <orTerm>
+          <feature name="MSCH"/>
+          <feature name="PRES"/>
+        </orTerm>
+      </mandatoryConform>
+    </command>
+    <command id="0x09" name="CommitPresetsSchedulesRequest" direction="commandToServer" response="Y">
+      <access invokePrivilege="manage"/>
+      <mandatoryConform>
+        <orTerm>
+          <feature name="MSCH"/>
+          <feature name="PRES"/>
+        </orTerm>
+      </mandatoryConform>
+    </command>
+    <command id="0x0A" name="CancelSetActivePresetRequest" direction="commandToServer" response="Y">
+      <access invokePrivilege="operate"/>
+      <mandatoryConform>
+        <feature name="QDPRES"/>
+      </mandatoryConform>
+    </command>
   </commands>
 </cluster>
\ No newline at end of file
diff --git a/data_model/clusters/ThermostatUserInterfaceConfiguration.xml b/data_model/clusters/ThermostatUserInterfaceConfiguration.xml
index 6c8d1d9..63fdba0 100644
--- a/data_model/clusters/ThermostatUserInterfaceConfiguration.xml
+++ b/data_model/clusters/ThermostatUserInterfaceConfiguration.xml
@@ -60,6 +60,9 @@
     <revision revision="1" summary="Global mandatory ClusterRevision attribute added"/>
     <revision revision="2" summary="New data model format and notation, added &quot;Conversion of Temperature Values for Display&quot; section"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0204" name="Thermostat User Interface Configuration"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="TSUIC" scope="Endpoint"/>
   <dataTypes>
     <enum name="KeypadLockoutEnum">
diff --git a/data_model/clusters/ThreadBorderRouterDiagnostics.xml b/data_model/clusters/ThreadBorderRouterDiagnostics.xml
index 29b5da9..5527c48 100644
--- a/data_model/clusters/ThreadBorderRouterDiagnostics.xml
+++ b/data_model/clusters/ThreadBorderRouterDiagnostics.xml
@@ -54,19 +54,23 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Thread Border Router Diagnostics" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId name="Thread Border Router Diagnostics"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="TODO" scope="Endpoint"/>
   <commands>
-    <command id="0x00" name="OpDatasetRequest" response="OpDatasetResponse">
+    <command id="0x00" name="OpDatasetRequest" direction="commandToServer" response="OpDatasetResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform/>
     </command>
     <command id="0x01" name="OpDatasetResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="OperationalDataset" type="octstr">
         <mandatoryConform>
@@ -75,12 +79,11 @@
         <constraint type="maxLength" value="254"/>
       </field>
     </command>
-    <command id="0x02" name="TopologyRequest" response="TopologyResponse">
+    <command id="0x02" name="TopologyRequest" direction="commandToServer" response="TopologyResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform/>
     </command>
     <command id="0x03" name="TopologyResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="ThreadTopology" type="TODO">
         <mandatoryConform>
diff --git a/data_model/clusters/TimeSync.xml b/data_model/clusters/TimeSync.xml
index 096e0ff..99ec173 100644
--- a/data_model/clusters/TimeSync.xml
+++ b/data_model/clusters/TimeSync.xml
@@ -1,7 +1,5 @@
 <?xml version="1.0"?>
 <!--

-link:../matter-defines.adoc[]

-

 Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.

 The information within this document is the property of the Connectivity

 Standards Alliance and its use and disclosure are restricted, except as

@@ -56,12 +54,18 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:imagesdir: service_device_management/images

+:xrefstyle: full

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0038" name="Time Synchronization" revision="2">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
     <revision revision="2" summary="Make TrustedTimeSource fabric-aware, add TSC feature, define list max sizes, change writable attributes to commands, remote port, add attribute for DNS support"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0038" name="Time Synchronization"/>
+  </clusterIds>
   <classification hierarchy="base" role="utility" picsCode="TIMESYNC" scope="Node"/>
   <features>
     <feature bit="0" code="TZ" name="TimeZone" summary="Server supports time zone.">
@@ -112,19 +116,19 @@
         <mandatoryConform/>
         <constraint type="desc"/>
       </field>
-      <field id="1" name="ValidStarting" type="ref_DataTypeEpochUs">
+      <field id="1" name="ValidStarting" type="epoch-us">
         <mandatoryConform/>
       </field>
-      <field id="2" name="ValidUntil" type="ref_DataTypeEpochUs">
+      <field id="2" name="ValidUntil" type="epoch-us">
         <quality nullable="true"/>
         <mandatoryConform/>
       </field>
     </struct>
     <struct name="FabricScopedTrustedTimeSourceStruct">
-      <field id="0" name="NodeID" type="ref_DataTypeNodeId">
+      <field id="0" name="NodeID" type="node-id">
         <mandatoryConform/>
       </field>
-      <field id="1" name="Endpoint" type="ref_DataTypeEndpointNumber">
+      <field id="1" name="Endpoint" type="endpoint-no">
         <mandatoryConform/>
       </field>
     </struct>
@@ -133,22 +137,22 @@
         <mandatoryConform/>
         <constraint type="between" from="-43200" to="50400"/>
       </field>
-      <field id="1" name="ValidAt" type="ref_DataTypeEpochUs">
+      <field id="1" name="ValidAt" type="epoch-us">
         <mandatoryConform/>
       </field>
-      <field id="2" name="Name" type="ref_DataTypeString">
+      <field id="2" name="Name" type="string">
         <optionalConform/>
-        <constraint type="between" from="0" to="64"/>
+        <constraint type="lengthBetween" from="0" to="64"/>
       </field>
     </struct>
     <struct name="TrustedTimeSourceStruct">
-      <field id="0" name="FabricIndex" type="ref_FabricIdx">
+      <field id="0" name="FabricIndex" type="fabric-idx">
         <mandatoryConform/>
       </field>
-      <field id="1" name="NodeID" type="ref_DataTypeNodeId">
+      <field id="1" name="NodeID" type="node-id">
         <mandatoryConform/>
       </field>
-      <field id="2" name="Endpoint" type="ref_DataTypeEndpointNumber">
+      <field id="2" name="Endpoint" type="endpoint-no">
         <mandatoryConform/>
       </field>
     </struct>
@@ -178,9 +182,9 @@
         <mandatoryConform/>
         <constraint type="between" from="-43200" to="50400"/>
       </field>
-      <field id="1" name="Name" type="ref_DataTypeString">
+      <field id="1" name="Name" type="string">
         <optionalConform/>
-        <constraint type="between" from="0" to="64 bytes"/>
+        <constraint type="lengthBetween" from="0" to="64 bytes"/>
       </field>
     </event>
     <event id="0x03" name="TimeFailure" priority="info">
@@ -192,10 +196,6 @@
       <mandatoryConform>
         <feature name="TSC"/>
       </mandatoryConform>
-      <field id="0" name="TrustedTimeSource" type="FabricScopedTrustedTimeSourceStruct">
-        <quality nullable="true"/>
-        <mandatoryConform/>
-      </field>
     </event>
   </events>
 </cluster>
\ No newline at end of file
diff --git a/data_model/clusters/Timer.xml b/data_model/clusters/Timer.xml
deleted file mode 100644
index ad0d864..0000000
--- a/data_model/clusters/Timer.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0"?>
-<!--

-Copyright (C) Connectivity Standards Alliance (2023). All rights reserved.

-The information within this document is the property of the Connectivity

-Standards Alliance and its use and disclosure are restricted, except as

-expressly set forth herein.

-

-Connectivity Standards Alliance hereby grants you a fully-paid, non-exclusive,

-nontransferable, worldwide, limited and revocable license (without the right to

-sublicense), under Connectivity Standards Alliance's applicable copyright

-rights, to view, download, save, reproduce and use the document solely for your

-own internal purposes and in accordance with the terms of the license set forth

-herein. This license does not authorize you to, and you expressly warrant that

-you shall not: (a) permit others (outside your organization) to use this

-document; (b) post or publish this document; (c) modify, adapt, translate, or

-otherwise change this document in any manner or create any derivative work

-based on this document; (d) remove or modify any notice or label on this

-document, including this Copyright Notice, License and Disclaimer. The

-Connectivity Standards Alliance does not grant you any license hereunder other

-than as expressly stated herein.

-

-Elements of this document may be subject to third party intellectual property

-rights, including without limitation, patent, copyright or trademark rights,

-and any such third party may or may not be a member of the Connectivity

-Standards Alliance. Connectivity Standards Alliance members grant other

-Connectivity Standards Alliance members certain intellectual property rights as

-set forth in the Connectivity Standards Alliance IPR Policy. Connectivity

-Standards Alliance members do not grant you any rights under this license. The

-Connectivity Standards Alliance is not responsible for, and shall not be held

-responsible in any manner for, identifying or failing to identify any or all

-such third party intellectual property rights. Please visit www.csa-iot.org for

-more information on how to become a member of the Connectivity Standards

-Alliance.

-

-This document and the information contained herein are provided on an “AS IS”

-basis and the Connectivity Standards Alliance DISCLAIMS ALL WARRANTIES EXPRESS

-OR IMPLIED, INCLUDING BUT NOT LIMITED TO (A) ANY WARRANTY THAT THE USE OF THE

-INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OF THIRD PARTIES (INCLUDING

-WITHOUT LIMITATION ANY INTELLECTUAL PROPERTY RIGHTS INCLUDING PATENT, COPYRIGHT

-OR TRADEMARK RIGHTS); OR (B) ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS

-FOR A PARTICULAR PURPOSE, TITLE OR NONINFRINGEMENT. IN NO EVENT WILL THE

-CONNECTIVITY STANDARDS ALLIANCE BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF

-BUSINESS, LOSS OF USE OF DATA, INTERRUPTION OF BUSINESS, OR FOR ANY OTHER

-DIRECT, INDIRECT, SPECIAL OR EXEMPLARY, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL

-DAMAGES OF ANY KIND, IN CONTRACT OR IN TORT, IN CONNECTION WITH THIS DOCUMENT

-OR THE INFORMATION CONTAINED HEREIN, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH

-LOSS OR DAMAGE.

-

-All company, brand and product names in this document may be trademarks that

-are the sole property of their respective owners.

-

-This notice and disclaimer must be included on all copies of this document.

-

-Connectivity Standards Alliance

-508 Second Street, Suite 206

-Davis, CA 95616, USA

--->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0047" name="Timer" revision="1">
-  <revisionHistory>
-    <revision revision="1" summary="Initial revision"/>
-  </revisionHistory>
-  <classification hierarchy="base" role="application" picsCode="TIMER" scope="Endpoint"/>
-  <features>
-    <feature bit="0" code="RESET" name="Reset" summary="Supports the ability to reset timers">
-      <optionalConform/>
-    </feature>
-  </features>
-  <dataTypes>
-    <enum name="TimerStatusEnum">
-      <item value="0" name="Running" summary="The timer is currently in a running state">
-        <mandatoryConform/>
-      </item>
-      <item value="1" name="Paused" summary="This timer is currently paused">
-        <mandatoryConform/>
-      </item>
-      <item value="2" name="Expired" summary="This timer has expired">
-        <mandatoryConform/>
-      </item>
-      <item value="3" name="Ready" summary="This timer is ready to start">
-        <mandatoryConform/>
-      </item>
-    </enum>
-  </dataTypes>
-  <attributes>
-    <attribute id="0x0000" name="SetTime" type="elapsed-s">
-      <access read="true" readPrivilege="view"/>
-      <mandatoryConform/>
-      <constraint type="max" value="259200"/>
-    </attribute>
-    <attribute id="0x0001" name="TimeRemaining" type="elapsed-s">
-      <access read="true" readPrivilege="view"/>
-      <quality changeOmitted="true" nullable="false" scene="false" persistence="volatile" reportable="false"/>
-      <mandatoryConform/>
-      <constraint type="between" from="0" to="SetTime"/>
-    </attribute>
-    <attribute id="0x0002" name="TimerState" type="TimerStatusEnum">
-      <access read="true" readPrivilege="view"/>
-      <mandatoryConform/>
-    </attribute>
-  </attributes>
-  <commands>
-    <command id="0x00" name="SetTimer" response="Y">
-      <access invokePrivilege="operate"/>
-      <field id="0" name="NewTime" type="elapsed-s">
-        <mandatoryConform/>
-        <constraint type="desc"/>
-      </field>
-    </command>
-    <command id="0x01" name="ResetTimer" response="Y">
-      <access invokePrivilege="operate"/>
-      <mandatoryConform>
-        <feature name="RESET"/>
-      </mandatoryConform>
-    </command>
-    <command id="0x02" name="AddTime" response="Y">
-      <access invokePrivilege="operate"/>
-      <field id="0" name="AdditionalTime" type="elapsed-s">
-        <mandatoryConform/>
-        <constraint type="desc"/>
-      </field>
-    </command>
-    <command id="0x03" name="ReduceTime" response="Y">
-      <access invokePrivilege="operate"/>
-      <optionalConform/>
-      <field id="0" name="TimeReduction" type="elapsed-s">
-        <mandatoryConform/>
-        <constraint type="desc"/>
-      </field>
-    </command>
-  </commands>
-</cluster>
\ No newline at end of file
diff --git a/data_model/clusters/ValveConfigurationControl.xml b/data_model/clusters/ValveConfigurationControl.xml
index 32620ad..548fed7 100644
--- a/data_model/clusters/ValveConfigurationControl.xml
+++ b/data_model/clusters/ValveConfigurationControl.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0081" name="Valve Configuration and Control" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0081" name="Valve Configuration and Control"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="VALCC" scope="Endpoint"/>
   <features>
     <feature bit="0" code="TS" name="TimeSync" summary="UTC time is used for time indications"/>
@@ -171,7 +176,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="Open" response="Y">
+    <command id="0x00" name="Open" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field id="0" name="OpenDuration" type="elapsed-s">
@@ -186,7 +191,7 @@
         <constraint type="min" value="1"/>
       </field>
     </command>
-    <command id="0x01" name="Close" response="Y">
+    <command id="0x01" name="Close" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
diff --git a/data_model/clusters/WakeOnLAN.xml b/data_model/clusters/WakeOnLAN.xml
index 799c92a..deb5af5 100644
--- a/data_model/clusters/WakeOnLAN.xml
+++ b/data_model/clusters/WakeOnLAN.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0503" name="Wake on LAN" revision="1">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0503" name="Wake On LAN" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0503" name="Wake on LAN"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="WAKEONLAN" scope="Endpoint"/>
   <attributes>
     <attribute id="0x0000" name="MACAddress" type="string">
diff --git a/data_model/clusters/WaterContentMeasurement.xml b/data_model/clusters/WaterContentMeasurement.xml
index 8b1ff6a..85d4479 100644
--- a/data_model/clusters/WaterContentMeasurement.xml
+++ b/data_model/clusters/WaterContentMeasurement.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Water Content Measurement Clusters" revision="3">
   <revisionHistory>
@@ -61,6 +63,9 @@
     <revision revision="2" summary="CCB 2241"/>
     <revision revision="3" summary="New data model format and notation"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0405" name="Relative Humidity Measurement"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="RH" scope="Endpoint"/>
   <attributes>
     <attribute id="0x0000" name="MeasuredValue" type="uint16">
diff --git a/data_model/clusters/WaterHeaterManagement.xml b/data_model/clusters/WaterHeaterManagement.xml
index 073da00..4b63685 100644
--- a/data_model/clusters/WaterHeaterManagement.xml
+++ b/data_model/clusters/WaterHeaterManagement.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0094" name="Water Heater Management" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release in Matter"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0094" name="Water Heater Management"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="WHM" scope="Endpoint"/>
   <features>
     <feature bit="1" code="EM" name="EnergyManagement" summary="Allows energy management control of the tank">
@@ -129,7 +134,7 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x01" name="Boost" response="Y">
+    <command id="0x01" name="Boost" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform/>
       <field id="0" name="Duration" type="elapsed-s">
@@ -151,7 +156,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x01" name="CancelBoost" response="Y">
+    <command id="0x01" name="CancelBoost" direction="commandToServer" response="Y">
       <access invokePrivilege="manage"/>
       <mandatoryConform/>
     </command>
diff --git a/data_model/clusters/WiFiNetworkManagement.xml b/data_model/clusters/WiFiNetworkManagement.xml
index 6308eca..fbb7a84 100644
--- a/data_model/clusters/WiFiNetworkManagement.xml
+++ b/data_model/clusters/WiFiNetworkManagement.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Wi" revision="1">
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Wi-Fi Network Management" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId name="Wi"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="TODO" scope="Endpoint"/>
   <attributes>
     <attribute id="0x0001" name="SSID" type="octstr" default="null">
@@ -69,12 +74,11 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="NetworkPassphraseRequest" response="NetworkPassphraseResponse">
+    <command id="0x00" name="NetworkPassphraseRequest" direction="commandToServer" response="NetworkPassphraseResponse">
       <access invokePrivilege="admin"/>
       <mandatoryConform/>
     </command>
     <command id="0x01" name="NetworkPassphraseResponse" direction="responseFromServer">
-      <access invokePrivilege="operate"/>
       <mandatoryConform/>
       <field name="Passphrase" type="octstr">
         <mandatoryConform/>
diff --git a/data_model/clusters/WindowCovering.xml b/data_model/clusters/WindowCovering.xml
index 3ee6d43..7b0afd4 100644
--- a/data_model/clusters/WindowCovering.xml
+++ b/data_model/clusters/WindowCovering.xml
@@ -54,6 +54,8 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:xrefstyle: basic

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0102" name="Window Covering" revision="5">
   <revisionHistory>
@@ -63,6 +65,9 @@
     <revision revision="4" summary="All Hubs changes with FeatureMap &amp; OperationalStatus attribute"/>
     <revision revision="5" summary="New data model format and notation. Created plus clarified PositionAware and AbsolutePosition features. General cleanup of functionality."/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0102" name="Window Covering"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="WNCV" scope="Endpoint"/>
   <features>
     <feature bit="0" code="LF" name="Lift" summary="Lift control and behavior for lifting/sliding window coverings">
@@ -608,19 +613,19 @@
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="UpOrOpen" response="Y">
+    <command id="0x00" name="UpOrOpen" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
-    <command id="0x01" name="DownOrClose" response="Y">
+    <command id="0x01" name="DownOrClose" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
-    <command id="0x02" name="StopMotion" response="Y">
+    <command id="0x02" name="StopMotion" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <mandatoryConform/>
     </command>
-    <command id="0x04" name="GoToLiftValue" response="Y">
+    <command id="0x04" name="GoToLiftValue" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <optionalConform>
         <andTerm>
@@ -633,7 +638,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x05" name="GoToLiftPercentage" response="Y">
+    <command id="0x05" name="GoToLiftPercentage" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <otherwiseConform>
         <mandatoryConform>
@@ -655,7 +660,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x07" name="GoToTiltValue" response="Y">
+    <command id="0x07" name="GoToTiltValue" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <optionalConform>
         <andTerm>
@@ -668,7 +673,7 @@
         <constraint type="desc"/>
       </field>
     </command>
-    <command id="0x08" name="GoToTiltPercentage" response="Y">
+    <command id="0x08" name="GoToTiltPercentage" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <otherwiseConform>
         <mandatoryConform>
diff --git a/data_model/clusters/bridge-clusters-Actions.xml b/data_model/clusters/bridge-clusters-ActionsCluster.xml
similarity index 87%
rename from data_model/clusters/bridge-clusters-Actions.xml
rename to data_model/clusters/bridge-clusters-ActionsCluster.xml
index 51f7ee7..e02b12e 100644
--- a/data_model/clusters/bridge-clusters-Actions.xml
+++ b/data_model/clusters/bridge-clusters-ActionsCluster.xml
@@ -54,11 +54,16 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:sectnums:

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0025" name="Actions" revision="1">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0025" name="Actions"/>
+  </clusterIds>
   <classification hierarchy="base" role="application" picsCode="ACT" scope="Node"/>
   <dataTypes>
     <enum name="ActionErrorEnum">
@@ -159,7 +164,7 @@
       <field id="0" name="ActionID" type="uint16">
         <mandatoryConform/>
       </field>
-      <field id="1" name="Name" type="ref_DataTypeString">
+      <field id="1" name="Name" type="string">
         <mandatoryConform/>
       </field>
       <field id="2" name="Type" type="ActionTypeEnum">
@@ -181,7 +186,7 @@
         <access read="true"/>
         <mandatoryConform/>
       </field>
-      <field id="1" name="Name" type="ref_DataTypeString">
+      <field id="1" name="Name" type="string">
         <access read="true"/>
         <mandatoryConform/>
       </field>
@@ -189,32 +194,35 @@
         <access read="true"/>
         <mandatoryConform/>
       </field>
-      <field id="3" name="Endpoints" type="ref_DataTypeList[ref_DataTypeEndpointNumber]">
+      <field id="3" name="Endpoints" type="list">
+        <entry type="endpoint-no"/>
         <access read="true"/>
         <mandatoryConform/>
-        <constraint type="max" value="256"/>
+        <constraint type="maxCount" value="256"/>
       </field>
     </struct>
   </dataTypes>
   <attributes>
-    <attribute id="0x0000" name="ActionList" type="ref_DataTypeList[ActionStruct Type]" default="empty">
+    <attribute id="0x0000" name="ActionList" type="list" default="empty">
+      <entry type="ActionStruct"/>
       <access read="true" readPrivilege="view"/>
       <mandatoryConform/>
-      <constraint type="max" value="256"/>
+      <constraint type="maxCount" value="256"/>
     </attribute>
-    <attribute id="0x0001" name="EndpointLists" type="ref_DataTypeList[EndpointListStruct Type]" default="empty">
+    <attribute id="0x0001" name="EndpointLists" type="list" default="empty">
+      <entry type="EndpointListStruct"/>
       <access read="true" readPrivilege="view"/>
       <mandatoryConform/>
-      <constraint type="max" value="256"/>
+      <constraint type="maxCount" value="256"/>
     </attribute>
-    <attribute id="0x0002" name="SetupURL" type="ref_DataTypeString" default="empty">
+    <attribute id="0x0002" name="SetupURL" type="string" default="empty">
       <access read="true" readPrivilege="view"/>
       <optionalConform/>
-      <constraint type="max" value="512"/>
+      <constraint type="maxLength" value="512"/>
     </attribute>
   </attributes>
   <commands>
-    <command id="0x00" name="InstantAction" response="Y">
+    <command id="0x00" name="InstantAction" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <field id="0" name="ActionID" type="uint16">
         <mandatoryConform/>
@@ -223,7 +231,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x01" name="InstantActionWithTransition" response="Y">
+    <command id="0x01" name="InstantActionWithTransition" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <field id="0" name="ActionID" type="uint16">
         <mandatoryConform/>
@@ -235,7 +243,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x02" name="StartAction" response="Y">
+    <command id="0x02" name="StartAction" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <field id="0" name="ActionID" type="uint16">
         <mandatoryConform/>
@@ -244,7 +252,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x03" name="StartActionWithDuration" response="Y">
+    <command id="0x03" name="StartActionWithDuration" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <field id="0" name="ActionID" type="uint16">
         <mandatoryConform/>
@@ -256,7 +264,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x04" name="StopAction" response="Y">
+    <command id="0x04" name="StopAction" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <field id="0" name="ActionID" type="uint16">
         <mandatoryConform/>
@@ -265,7 +273,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x05" name="PauseAction" response="Y">
+    <command id="0x05" name="PauseAction" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <field id="0" name="ActionID" type="uint16">
         <mandatoryConform/>
@@ -274,7 +282,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x06" name="PauseActionWithDuration" response="Y">
+    <command id="0x06" name="PauseActionWithDuration" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <field id="0" name="ActionID" type="uint16">
         <mandatoryConform/>
@@ -286,7 +294,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x07" name="ResumeAction" response="Y">
+    <command id="0x07" name="ResumeAction" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <field id="0" name="ActionID" type="uint16">
         <mandatoryConform/>
@@ -295,7 +303,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x08" name="EnableAction" response="Y">
+    <command id="0x08" name="EnableAction" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <field id="0" name="ActionID" type="uint16">
         <mandatoryConform/>
@@ -304,7 +312,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x09" name="EnableActionWithDuration" response="Y">
+    <command id="0x09" name="EnableActionWithDuration" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <field id="0" name="ActionID" type="uint16">
         <mandatoryConform/>
@@ -316,7 +324,7 @@
         <mandatoryConform/>
       </field>
     </command>
-    <command id="0x0A" name="DisableAction" response="Y">
+    <command id="0x0A" name="DisableAction" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <field id="0" name="ActionID" type="uint16">
         <mandatoryConform/>
@@ -325,7 +333,7 @@
         <optionalConform/>
       </field>
     </command>
-    <command id="0x0B" name="DisableActionWithDuration" response="Y">
+    <command id="0x0B" name="DisableActionWithDuration" direction="commandToServer" response="Y">
       <access invokePrivilege="operate"/>
       <field id="0" name="ActionID" type="uint16">
         <mandatoryConform/>
diff --git a/data_model/clusters/bridge-clusters-BridgedDeviceBasicInformation.xml b/data_model/clusters/bridge-clusters-BridgedDeviceBasicInformationCluster.xml
similarity index 95%
rename from data_model/clusters/bridge-clusters-BridgedDeviceBasicInformation.xml
rename to data_model/clusters/bridge-clusters-BridgedDeviceBasicInformationCluster.xml
index 5c4bd86..1dd336e 100644
--- a/data_model/clusters/bridge-clusters-BridgedDeviceBasicInformation.xml
+++ b/data_model/clusters/bridge-clusters-BridgedDeviceBasicInformationCluster.xml
@@ -54,13 +54,18 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:sectnums:

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0039" name="Bridged Device Basic Information" revision="3">
   <revisionHistory>
     <revision revision="1" summary="Initial Release"/>
     <revision revision="2" summary="Added ProductAppearance attribute"/>
-    <revision revision="3" summary="Added SpecificationVersion attribute"/>
+    <revision revision="3" summary="Added SpecificationVersion and MaxPathsPerInvoke attributes"/>
   </revisionHistory>
+  <clusterIds>
+    <clusterId id="0x0039" name="Bridged Device Basic Information"/>
+  </clusterIds>
   <classification hierarchy="derived" baseCluster="Basic Information" role="utility" picsCode="BRBINFO" scope="Endpoint"/>
   <attributes>
     <attribute id="0x0000" name="DataModelRevision">
@@ -129,6 +134,9 @@
     <attribute id="0x0015" name="SpecificationVersion">
       <disallowConform/>
     </attribute>
+    <attribute id="0x0016" name="MaxPathsPerInvoke">
+      <disallowConform/>
+    </attribute>
   </attributes>
   <events>
     <event id="0x00" name="StartUp">
diff --git a/data_model/clusters/energy_management.xml b/data_model/clusters/energy_management.xml
index 7925607..93858d1 100644
--- a/data_model/clusters/energy_management.xml
+++ b/data_model/clusters/energy_management.xml
@@ -54,5 +54,7 @@
 Connectivity Standards Alliance

 508 Second Street, Suite 206

 Davis, CA 95616, USA

+

+:toc:

 -->
 <cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Energy Management" revision=""/>
\ No newline at end of file
diff --git a/data_model/clusters/network_infrastructure.xml b/data_model/clusters/network_infrastructure.xml
index 181ee35..7e75cc0 100644
--- a/data_model/clusters/network_infrastructure.xml
+++ b/data_model/clusters/network_infrastructure.xml
@@ -59,4 +59,4 @@
 508 Second Street, Suite 206

 Davis, CA 95616, USA

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Network Infrastructure" revision=""/>
\ No newline at end of file
+<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="" name="Network Infrastructure" revision=""/>
diff --git a/data_model/device_types/BaseDeviceType.xml b/data_model/device_types/BaseDeviceType.xml
index a92816a..22cec95 100644
--- a/data_model/device_types/BaseDeviceType.xml
+++ b/data_model/device_types/BaseDeviceType.xml
@@ -62,23 +62,4 @@
     <revision revision="2" summary="Duplicate condition replaces Multiple condition"/>
   </revisionHistory>
   <conditions/>
-  <clusters>
-    <cluster id="0x001D" name="Descriptor" side="server">
-      <mandatoryConform/>
-    </cluster>
-    <cluster id="0x001E" name="Binding" side="server">
-      <mandatoryConform>
-        <andTerm>
-          <condition name="Simple"/>
-          <condition name="Client"/>
-        </andTerm>
-      </mandatoryConform>
-    </cluster>
-    <cluster id="0x0040" name="Fixed Label" side="server">
-      <optionalConform/>
-    </cluster>
-    <cluster id="0x0041" name="User Label" side="server">
-      <optionalConform/>
-    </cluster>
-  </clusters>
 </deviceType>
\ No newline at end of file
diff --git a/data_model/device_types/Cooktop.xml b/data_model/device_types/Cooktop.xml
index 233c72e..ea94653 100644
--- a/data_model/device_types/Cooktop.xml
+++ b/data_model/device_types/Cooktop.xml
@@ -71,9 +71,6 @@
         <feature code="" name="OFFONLY">
           <mandatoryConform/>
         </feature>
-        <feature code="" name="DF">
-          <mandatoryConform/>
-        </feature>
       </features>
     </cluster>
   </clusters>
diff --git a/data_model/clusters/Label-Cluster-FixedLabel.xml b/data_model/device_types/DeviceEnergyManagement.xml
similarity index 81%
copy from data_model/clusters/Label-Cluster-FixedLabel.xml
copy to data_model/device_types/DeviceEnergyManagement.xml
index 558664a..9d993a9 100644
--- a/data_model/clusters/Label-Cluster-FixedLabel.xml
+++ b/data_model/device_types/DeviceEnergyManagement.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!--

-Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.

+Copyright (C) Connectivity Standards Alliance (2023). All rights reserved.

 The information within this document is the property of the Connectivity

 Standards Alliance and its use and disclosure are restricted, except as

 expressly set forth herein.

@@ -55,18 +55,17 @@
 508 Second Street, Suite 206

 Davis, CA 95616, USA

 -->
-<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0040" name="Fixed Label" revision="1">
+<deviceType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd devicetype devicetype.xsd" id="0x050D" name="Device Energy Management" revision="1">
   <revisionHistory>
-    <revision revision="1" summary="Initial Release"/>
+    <revision revision="1" summary="Initial release"/>
   </revisionHistory>
-  <classification hierarchy="derived" baseCluster="Label" role="utility" picsCode="FLABEL" scope="Endpoint"/>
-  <dataTypes/>
-  <attributes>
-    <attribute id="0x0000" name="LabelList" type="list" default="empty">
-      <entry type="LabelStruct"/>
-      <access read="true" readPrivilege="view"/>
-      <quality changeOmitted="false" nullable="false" scene="false" persistence="nonVolatile" reportable="false"/>
+  <classification class="utility" scope="endpoint"/>
+  <clusters>
+    <cluster id="0x0098" name="Device Energy Management" side="server">
       <mandatoryConform/>
-    </attribute>
-  </attributes>
-</cluster>
\ No newline at end of file
+    </cluster>
+    <cluster id="0x009F" name="Device Energy Management Mode" side="server">
+      <mandatoryConform/>
+    </cluster>
+  </clusters>
+</deviceType>
\ No newline at end of file
diff --git a/data_model/device_types/EVSE.xml b/data_model/device_types/EVSE.xml
index f15b1db..9e6ce7b 100644
--- a/data_model/device_types/EVSE.xml
+++ b/data_model/device_types/EVSE.xml
@@ -65,28 +65,6 @@
     <cluster id="0x0003" name="Identify" side="server">
       <optionalConform/>
     </cluster>
-    <cluster id="0x0011" name="Power Source" side="server">
-      <mandatoryConform/>
-    </cluster>
-    <cluster id="0x0098" name="Device Energy Management" side="server">
-      <mandatoryConform/>
-      <features>
-        <feature code="" name="PA">
-          <mandatoryConform/>
-        </feature>
-        <feature code="" name="PFR">
-          <otherwiseConform>
-            <mandatoryConform>
-              <feature name="PFA"/>
-            </mandatoryConform>
-            <optionalConform/>
-          </otherwiseConform>
-        </feature>
-        <feature code="" name="PFA">
-          <optionalConform/>
-        </feature>
-      </features>
-    </cluster>
     <cluster id="0x0099" name="Energy EVSE" side="server">
       <mandatoryConform/>
     </cluster>
diff --git a/data_model/device_types/Thermostat.xml b/data_model/device_types/Thermostat.xml
index fc15446..cbdedb7 100644
--- a/data_model/device_types/Thermostat.xml
+++ b/data_model/device_types/Thermostat.xml
@@ -82,13 +82,13 @@
         <condition name="Zigbee"/>
       </optionalConform>
     </cluster>
-    <cluster id="0x0038" name="TimeSync" side="server">
+    <cluster id="0x0038" name="Time Synchronization" side="server">
       <otherwiseConform>
         <provisionalConform/>
         <optionalConform/>
       </otherwiseConform>
     </cluster>
-    <cluster id="0x0038" name="TimeSync" side="client">
+    <cluster id="0x0038" name="Time Synchronization" side="client">
       <otherwiseConform>
         <provisionalConform/>
         <optionalConform/>
diff --git a/data_model/scraper_version b/data_model/scraper_version
index 0495c4a..e8ea05d 100644
--- a/data_model/scraper_version
+++ b/data_model/scraper_version
@@ -1 +1 @@
-1.2.3
+1.2.4
diff --git a/data_model/spec_sha b/data_model/spec_sha
index ec683a1..97f7f06 100644
--- a/data_model/spec_sha
+++ b/data_model/spec_sha
@@ -1 +1 @@
-72ce960f71810d6ca96125aea54e4fb0a9631e34
+b0310bae0264a29665f23a8f3d4dc4f742be6075
diff --git a/scripts/spec_xml/generate_spec_xml.py b/scripts/spec_xml/generate_spec_xml.py
index f4f30d0..016f92d 100755
--- a/scripts/spec_xml/generate_spec_xml.py
+++ b/scripts/spec_xml/generate_spec_xml.py
@@ -79,7 +79,7 @@
 
     def scrape_cluster(filename: str) -> None:
         xml_path = get_xml_path(filename, clusters_output_dir)
-        cmd = [scraper, 'cluster', '-i', filename, '-o', xml_path, '-nd']
+        cmd = [scraper, 'cluster', '-i', filename, '-o', xml_path, '-nd', '--define', 'in-progress']
         if dry_run:
             print(cmd)
         else:
diff --git a/src/python_testing/spec_parsing_support.py b/src/python_testing/spec_parsing_support.py
index 9b65df0..6a9d1f8 100644
--- a/src/python_testing/spec_parsing_support.py
+++ b/src/python_testing/spec_parsing_support.py
@@ -354,6 +354,9 @@
                 return CommandType.GENERATED
             if element.attrib['direction'].lower() == 'commandtoclient':
                 return CommandType.UNKNOWN
+            if element.attrib['direction'].lower() == 'commandtoserver':
+                return CommandType.ACCEPTED
+            raise Exception(f"Unknown direction: {element.attrib['direction']}")
         except KeyError:
             return CommandType.ACCEPTED