diff --git a/src/app/tests/suites/certification/PICS.yaml b/src/app/tests/suites/certification/PICS.yaml
index 8070ca3..2affde1 100644
--- a/src/app/tests/suites/certification/PICS.yaml
+++ b/src/app/tests/suites/certification/PICS.yaml
@@ -845,6 +845,45 @@
       id: ACT.C.C0b.Tx
 
     #
+    # server / commandsGenerated
+    #
+    - label: "Does the device implement of InstantAction command?"
+      id: ACT.S.C00.Rsp
+
+    - label: "Does the device implement of InstantActionWithTransition command?"
+      id: ACT.S.C01.Rsp
+
+    - label: "Does the device implement of StartAction command?"
+      id: ACT.S.C02.Rsp
+
+    - label: "Does the device implement of StartActionWithDuration command?"
+      id: ACT.S.C03.Rsp
+
+    - label: "Does the device implement of StopAction command?"
+      id: ACT.S.C04.Rsp
+
+    - label: "Does the device implement of PauseAction command?"
+      id: ACT.S.C05.Rsp
+
+    - label: "Does the device implement of PauseActionWithDuration command?"
+      id: ACT.S.C06.Rsp
+
+    - label: "Does the device implement of ResumeAction command?"
+      id: ACT.S.C07.Rsp
+
+    - label: "Does the device implement of EnableAction command?"
+      id: ACT.S.C08.Rsp
+
+    - label: "Does the device implement of EnableActionWithDuration command?"
+      id: ACT.S.C09.Rsp
+
+    - label: "Does the device implement of DisableAction command?"
+      id: ACT.S.C0a.Rsp
+
+    - label: "Does the device implement of DisableActionWithDuration command?"
+      id: ACT.S.C0b.Rsp
+
+    #
     # client / manually
     #
     - label: "Write all supported optional attributes"
@@ -1813,9 +1852,12 @@
     - label: "Does the device implement the DISHM cluster as a server?"
       id: DISHM.S
 
-    - label: "IDoes the DUT support testing the failed ChangeToMode command?"
+    - label: "Does the DUT support testing the failed ChangeToMode command?"
       id: DISHM.S.M.CAN_TEST_MODE_FAILURE
 
+    - label: "Can the mode changed by manually control at the device?"
+      id: DISHM.S.M.CAN_MANUALLY_CONTROLLED
+
     # PIXIT
 
     - label:
@@ -2063,6 +2105,15 @@
     - label: "Does the DUT(Server) support LastConnectErrorValue attribute?"
       id: CNET.S.A0007
 
+    - label: "Does the DUT(Server) support SupportedWiFiBands attribute?"
+      id: CNET.S.A0008
+
+    - label: "Does the DUT(Server) support SupportedThreadFeatures attribute?"
+      id: CNET.S.A0009
+
+    - label: "Does the DUT(Server) support ThreadVersion attribute?"
+      id: CNET.S.A000A
+
     #
     # server / commandsReceived
     #
@@ -5380,13 +5431,13 @@
     # server / manually
     #
     - label: "Can the DUT be brought into a Wired Fault state?"
-      id: PS.M.ManualWiredFault
+      id: PS.S.M.ManualWiredFault
 
     - label: "Can the DUT be brought into a Battery Fault state?"
-      id: PS.M.ManualBatFault
+      id: PS.S.M.ManualBatFault
 
     - label: "Can the DUT be brought into a Battery Charge Fault state?"
-      id: PS.M.ManualBatChargeFault
+      id: PS.S.M.ManualBatChargeFault
 
     #
     # client / manually
@@ -8899,6 +8950,9 @@
     - label: "Does the DUT support testing the failed ChangeToMode command?"
       id: LWM.S.M.CAN_TEST_MODE_FAILURE
 
+    - label: "Can the mode changed by manually control at the device?"
+      id: LWM.S.M.CAN_MANUALLY_CONTROLLED
+
     - label:
           "Id of mode the device will fail to transition to, given its current
           state"
@@ -9055,6 +9109,9 @@
           state"
       id: PIXIT.TCCM.MODE_CHANGE_FAIL
 
+    - label: "Can the mode changed by manually control at the device?"
+      id: TCCM.S.M.CAN_MANUALLY_CONTROLLED
+
     #Features
     - label:
           "Does the device support depending on an On/Off cluster implemented on
diff --git a/src/app/tests/suites/certification/Test_TC_ACFREMON_1_1.yaml b/src/app/tests/suites/certification/Test_TC_ACFREMON_1_1.yaml
index a354e1c..3f4a7cc 100644
--- a/src/app/tests/suites/certification/Test_TC_ACFREMON_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_ACFREMON_1_1.yaml
@@ -73,7 +73,7 @@
               hasMasksSet: [0x2]
 
     - label:
-          "Step 3d: Given ACFREMON.S.F01(ReplacementProductList) ensure
+          "Step 3d: Given ACFREMON.S.F02(ReplacementProductList) ensure
           featuremap has the correct bit set"
       command: "readAttribute"
       attribute: "FeatureMap"
diff --git a/src/app/tests/suites/certification/Test_TC_ACFREMON_2_1.yaml b/src/app/tests/suites/certification/Test_TC_ACFREMON_2_1.yaml
index 797e87c..987fd0a 100644
--- a/src/app/tests/suites/certification/Test_TC_ACFREMON_2_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_ACFREMON_2_1.yaml
@@ -23,7 +23,9 @@
     endpoint: 1
 
 tests:
-    - label: "Step 1: Wait for the commissioned device to be retrieved"
+    - label:
+          "Step 1: Commission DUT to TH (can be skipped if done in a preceding
+          test)."
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -52,15 +54,23 @@
               minValue: 0
               maxValue: 1
 
-    - label: "Step 4: TH reads from the DUT the ChangeIndication attribute."
-      PICS: ACFREMON.S.A0002
+    - label: "Step 4a: TH reads from the DUT the ChangeIndication attribute."
+      PICS: ACFREMON.S.A0002 && !ACFREMON.S.F01
       command: "readAttribute"
       attribute: "ChangeIndication"
       response:
           constraints:
               type: enum8
-              minValue: 0
-              maxValue: 2
+              anyOf: [0, 2]
+
+    - label: "Step 4b: TH reads from the DUT the ChangeIndication attribute."
+      PICS: ACFREMON.S.F01 && ACFREMON.S.A0002
+      command: "readAttribute"
+      attribute: "ChangeIndication"
+      response:
+          value: 1
+          constraints:
+              type: enum8
 
     - label: "Step 5: TH reads from the DUT the InPlaceIndicator attribute"
       PICS: ACFREMON.S.A0003
diff --git a/src/app/tests/suites/certification/Test_TC_ACL_2_1.yaml b/src/app/tests/suites/certification/Test_TC_ACL_2_1.yaml
index 7758d8d..98197f9 100644
--- a/src/app/tests/suites/certification/Test_TC_ACL_2_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_ACL_2_1.yaml
@@ -24,7 +24,7 @@
     endpoint: 0
 
 tests:
-    - label: "Step 1: Wait for the commissioned device to be retrieved"
+    - label: "Step 1: TH1 commissions DUT using admin node ID N1"
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -32,7 +32,9 @@
               - name: "nodeId"
                 value: nodeId
 
-    - label: "Step 2: TH reads SubjectsPerAccessControlEntry attribute from DUT"
+    - label:
+          "Step 2: TH1 reads DUT Endpoint 0 AccessControl cluster
+          SubjectsPerAccessControlEntry attribute"
       PICS: ACL.S.A0002
       command: "readAttribute"
       attribute: "SubjectsPerAccessControlEntry"
@@ -42,7 +44,9 @@
               minValue: 4
               maxValue: 65535
 
-    - label: "Step 3: TH reads TargetsPerAccessControlEntry attribute from DUT"
+    - label:
+          "Step 3: TH1 reads DUT Endpoint 0 AccessControl cluster
+          TargetsPerAccessControlEntry attribute"
       PICS: ACL.S.A0003
       command: "readAttribute"
       attribute: "TargetsPerAccessControlEntry"
@@ -52,12 +56,14 @@
               minValue: 3
               maxValue: 65535
 
-    - label: "Step 4: TH reads AccessControlEntriesPerFabric attribute from DUT"
+    - label:
+          "Step 4: TH1 reads DUT Endpoint 0 AccessControl cluster
+          AccessControlEntriesPerFabric attribute"
       PICS: ACL.S.A0004
       command: "readAttribute"
       attribute: "AccessControlEntriesPerFabric"
       response:
           constraints:
               type: int16u
-              minValue: 3
+              minValue: 4
               maxValue: 65535
diff --git a/src/app/tests/suites/certification/Test_TC_ACL_2_3.yaml b/src/app/tests/suites/certification/Test_TC_ACL_2_3.yaml
index af287a4..1e769ec 100644
--- a/src/app/tests/suites/certification/Test_TC_ACL_2_3.yaml
+++ b/src/app/tests/suites/certification/Test_TC_ACL_2_3.yaml
@@ -17,6 +17,7 @@
 
 PICS:
     - ACL.S
+    - ACL.S.A0001
 
 config:
     nodeId: 0x12344321
@@ -54,7 +55,7 @@
         defaultValue: ""
 
 tests:
-    - label: "Step 1: Wait for the commissioned device to be retrieved"
+    - label: "Step 1: TH1 commissions DUT using admin node ID N1"
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
diff --git a/src/app/tests/suites/certification/Test_TC_ACT_1_1.yaml b/src/app/tests/suites/certification/Test_TC_ACT_1_1.yaml
index 83f1ce0..50ebde1 100644
--- a/src/app/tests/suites/certification/Test_TC_ACT_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_ACT_1_1.yaml
@@ -31,7 +31,7 @@
               - name: "nodeId"
                 value: nodeId
 
-    - label: "Step 2: Read the global attribute: ClusterRevision"
+    - label: "Step 2: TH reads from the DUT the ClusterRevision attribute."
       command: "readAttribute"
       attribute: "ClusterRevision"
       response:
@@ -39,7 +39,7 @@
           constraints:
               type: int16u
 
-    - label: "Step 3: Read the global attribute: FeatureMap"
+    - label: "Step 3: TH reads from the DUT the FeatureMap attribute."
       command: "readAttribute"
       attribute: "FeatureMap"
       response:
@@ -47,7 +47,7 @@
           constraints:
               type: bitmap32
 
-    - label: "Step 4a: Read the global attribute: AttributeList"
+    - label: "Step 4a: TH reads from the DUT the AttributeList attribute."
       PICS: PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "AttributeList"
@@ -76,36 +76,146 @@
 
     #Issue: https://github.com/project-chip/connectedhomeip/issues/26721
     - label: "Step 5: TH reads EventList attribute from DUT"
-      verification: |
-          ./chip-tool actions read event-list 1 1
-
-          Via the TH (chip-tool), verify:
-          -that EventList attribute contains list of supported events.
-          -that list has 1 entry(0) for this cluster.
-
-          [1676460741.103254][37023:37025] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0025 Attribute 0x0000_FFFA DataVersion: 928273128
-          [1676460741.103303][37023:37025] CHIP:TOO:   EventList: 1 entries
-          [1676460741.103320][37023:37025] CHIP:TOO:     [1]: 0
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED
-      arguments:
-          values:
-              - name: "message"
-                value: "Please enter 'y' for success"
-              - name: "expectedValue"
-                value: "y"
+      PICS: PICS_EVENT_LIST_ENABLED
+      command: "readAttribute"
+      attribute: "EventList"
+      response:
+          constraints:
+              type: list
+              contains: [0, 1]
 
     # Checking only type check all commands are optional
-    - label: "Step 6: Read the global attribute: AcceptedCommandList"
+    - label:
+          "Step 6a: TH Read the optional command (InstantAction) in
+          AcceptedCommandList"
+      PICS: ACT.S.C00.Rsp
       command: "readAttribute"
       attribute: "AcceptedCommandList"
       response:
           constraints:
               type: list
-              maxLength: 11
+              contains: [0x0]
 
-    - label: "Step 7: Read the global attribute: GeneratedCommandList"
+    - label:
+          "Step 6b: TH Read the optional command (InstantActionWithTransition)
+          in AcceptedCommandList"
+      PICS: ACT.S.C01.Rsp
+      command: "readAttribute"
+      attribute: "AcceptedCommandList"
+      response:
+          constraints:
+              type: list
+              contains: [0x01]
+
+    - label:
+          "Step 6C: TH Read the optional command (StartAction) in
+          AcceptedCommandList"
+      PICS: ACT.S.C02.Rsp
+      command: "readAttribute"
+      attribute: "AcceptedCommandList"
+      response:
+          constraints:
+              type: list
+              contains: [0x02]
+
+    - label:
+          "Step 6d: TH Read the optional command (StartActionWithDuration) in
+          AcceptedCommandList"
+      PICS: ACT.S.C03.Rsp
+      command: "readAttribute"
+      attribute: "AcceptedCommandList"
+      response:
+          constraints:
+              type: list
+              contains: [0x03]
+
+    - label:
+          "Step 6e: TH Read the optional command (StopAction) in
+          AcceptedCommandList"
+      PICS: ACT.S.C04.Rsp
+      command: "readAttribute"
+      attribute: "AcceptedCommandList"
+      response:
+          constraints:
+              type: list
+              contains: [0x04]
+    - label:
+          "Step 6f: TH Read the optional command (PauseAction) in
+          AcceptedCommandList"
+      PICS: ACT.S.C05.Rsp
+      command: "readAttribute"
+      attribute: "AcceptedCommandList"
+      response:
+          constraints:
+              type: list
+              contains: [0x05]
+
+    - label:
+          "Step 6g: TH Read the optional command (PauseActionWithDuration) in
+          AcceptedCommandList"
+      PICS: ACT.S.C06.Rsp
+      command: "readAttribute"
+      attribute: "AcceptedCommandList"
+      response:
+          constraints:
+              type: list
+              contains: [0x06]
+
+    - label:
+          "Step 6h: TH Read the optional command (ResumeAction) in
+          AcceptedCommandList"
+      PICS: ACT.S.C07.Rsp
+      command: "readAttribute"
+      attribute: "AcceptedCommandList"
+      response:
+          constraints:
+              type: list
+              contains: [0x07]
+
+    - label:
+          "Step 6i: TH Read the optional command (EnableAction) in
+          AcceptedCommandList"
+      PICS: ACT.S.C08.Rsp
+      command: "readAttribute"
+      attribute: "AcceptedCommandList"
+      response:
+          constraints:
+              type: list
+              contains: [0x08]
+    - label:
+          "Step 6j: TH Read the optional command (EnableActionWithDuration) in
+          AcceptedCommandList"
+      PICS: ACT.S.C09.Rsp
+      command: "readAttribute"
+      attribute: "AcceptedCommandList"
+      response:
+          constraints:
+              type: list
+              contains: [0x09]
+
+    - label:
+          "Step 6k: TH Read the optional command (DisableAction) in
+          AcceptedCommandList"
+      PICS: ACT.S.C0a.Rsp
+      command: "readAttribute"
+      attribute: "AcceptedCommandList"
+      response:
+          constraints:
+              type: list
+              contains: [0x0a]
+
+    - label:
+          "Step 6l: TH Read the optional command (DisableActionWithDuration) in
+          AcceptedCommandList"
+      PICS: ACT.S.C0b.Rsp
+      command: "readAttribute"
+      attribute: "AcceptedCommandList"
+      response:
+          constraints:
+              type: list
+              contains: [0x0b]
+
+    - label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute."
       command: "readAttribute"
       attribute: "GeneratedCommandList"
       response:
diff --git a/src/app/tests/suites/certification/Test_TC_BINFO_1_1.yaml b/src/app/tests/suites/certification/Test_TC_BINFO_1_1.yaml
index 1f909b0..6a9c2eb 100644
--- a/src/app/tests/suites/certification/Test_TC_BINFO_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_BINFO_1_1.yaml
@@ -12,9 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-name:
-    12.1.1. [TC-BINFO-1.1] Global Attributes for Basic Information Cluster
-    [DUT-Server]
+name: 12.1.1. [TC-BINFO-1.1] Global Attributes with DUT as Server
 
 PICS:
     - BINFO.S
@@ -184,6 +182,17 @@
               type: list
               contains: [18]
 
+    - label:
+          "Step 4j: TH reads optional attribute(ProductAppearance) in
+          attributeList"
+      PICS: BINFO.S.A0014
+      command: "readAttribute"
+      attribute: "AttributeList"
+      response:
+          constraints:
+              type: list
+              contains: [20]
+
     - label: "Step 5a: TH reads EventList from DUT"
       PICS:
           " !BINFO.S.E00 && !BINFO.S.E01 && !BINFO.S.E02 && !BINFO.S.A0011 &&
@@ -195,7 +204,7 @@
           constraints:
               type: list
 
-    - label: "Step 5b: Read BINFO.S.E00(StartUp) event in EventList"
+    - label: "Step 5b: TH reads BINFO.S.E00(StartUp) event in EventList"
       PICS: BINFO.S.E00 && PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "EventList"
@@ -204,7 +213,7 @@
               type: list
               contains: [0]
 
-    - label: "Step 5c: Read BINFO.S.E01(ShutDown) event in EventList"
+    - label: "Step 5c: TH reads BINFO.S.E01(ShutDown) event in EventList"
       PICS: BINFO.S.E01 && PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "EventList"
@@ -213,7 +222,7 @@
               type: list
               contains: [1]
 
-    - label: "Step 5d: Read BINFO.S.E02(Leave) event in EventList"
+    - label: "Step 5d: TH reads BINFO.S.E02(Leave) event in EventList"
       PICS: BINFO.S.E02 && PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "EventList"
@@ -222,7 +231,7 @@
               type: list
               contains: [2]
 
-    - label: "Step 5e: Read (ReachableChanged) event in EventList"
+    - label: "Step 5e: TH reads (ReachableChanged) event in EventList"
       PICS: BINFO.S.A0011 && PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "EventList"
diff --git a/src/app/tests/suites/certification/Test_TC_BOOL_1_1.yaml b/src/app/tests/suites/certification/Test_TC_BOOL_1_1.yaml
index 3131f07..d905504 100644
--- a/src/app/tests/suites/certification/Test_TC_BOOL_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_BOOL_1_1.yaml
@@ -23,7 +23,9 @@
     endpoint: 1
 
 tests:
-    - label: "Step 1: Wait for the commissioned device to be retrieved"
+    - label:
+          "Step 1: Commission DUT to TH (can be skipped if done in a preceding
+          test)."
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -31,7 +33,7 @@
               - name: "nodeId"
                 value: nodeId
 
-    - label: "Step 2: Read the global attribute: ClusterRevision"
+    - label: "Step 2: TH reads from the DUT the ClusterRevision attribute"
       command: "readAttribute"
       attribute: "ClusterRevision"
       response:
@@ -39,7 +41,7 @@
           constraints:
               type: int16u
 
-    - label: "Step 3: Read the global attribute: FeatureMap"
+    - label: "Step 3: TH reads from the DUT the FeatureMap attribute"
       command: "readAttribute"
       attribute: "FeatureMap"
       response:
@@ -47,7 +49,7 @@
           constraints:
               type: bitmap32
 
-    - label: "Step 4: Read the global attribute: AttributeList"
+    - label: "Step 4: TH reads from the DUT the AttributeList attribute."
       PICS: PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "AttributeList"
@@ -56,7 +58,7 @@
               type: list
               contains: [0, 65528, 65529, 65530, 65531, 65532, 65533]
 
-    - label: "Step 4: Read the global attribute: AttributeList"
+    - label: "Step 4: TH reads from the DUT the AttributeList attribute."
       PICS: "!PICS_EVENT_LIST_ENABLED"
       command: "readAttribute"
       attribute: "AttributeList"
@@ -65,7 +67,7 @@
               type: list
               contains: [0, 65528, 65529, 65531, 65532, 65533]
 
-    - label: "Step 5: Read the global attribute: EventList"
+    - label: "Step 5: TH reads from the DUT the EventList attribute"
       PICS: BOOL.S.E00 && PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "EventList"
@@ -74,7 +76,7 @@
           constraints:
               type: list
 
-    - label: "Step 5: Read the global attribute: EventList"
+    - label: "Step 5: TH reads from the DUT the EventList attribute"
       PICS: " !BOOL.S.E00 && PICS_EVENT_LIST_ENABLED "
       command: "readAttribute"
       attribute: "EventList"
@@ -83,7 +85,7 @@
           constraints:
               type: list
 
-    - label: "Step 6: Read the global attribute: AcceptedCommandList"
+    - label: "Step 6: TH reads from the DUT the AcceptedCommandList attribute"
       command: "readAttribute"
       attribute: "AcceptedCommandList"
       response:
@@ -91,7 +93,7 @@
           constraints:
               type: list
 
-    - label: "Step 7: Read the global attribute: GeneratedCommandList"
+    - label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute"
       command: "readAttribute"
       attribute: "GeneratedCommandList"
       response:
diff --git a/src/app/tests/suites/certification/Test_TC_BRBINFO_1_1.yaml b/src/app/tests/suites/certification/Test_TC_BRBINFO_1_1.yaml
index 2112bad..ef95ddd 100644
--- a/src/app/tests/suites/certification/Test_TC_BRBINFO_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_BRBINFO_1_1.yaml
@@ -34,6 +34,7 @@
               - name: "nodeId"
                 value: nodeId
 
+    #Issue: https://github.com/project-chip/connectedhomeip/issues/30467
     - label: "Step 2: TH reads the ClusterRevision from DUT"
       command: "readAttribute"
       attribute: "ClusterRevision"
@@ -207,7 +208,27 @@
               type: list
               contains: [18]
 
-    - label: "Step 5a: TH reads optional event(StartUp) in EventList"
+    - label:
+          "Step 4p: TH reads optional attribute(ProductAppearance) in
+          AttributeList"
+      PICS: BRBINFO.S.A0014
+      command: "readAttribute"
+      attribute: "AttributeList"
+      response:
+          constraints:
+              type: list
+              contains: [20]
+
+    - label: "Step 5a: TH reads from the DUT the EventList attribute"
+      PICS: PICS_EVENT_LIST_ENABLED
+      command: "readAttribute"
+      attribute: "EventList"
+      response:
+          constraints:
+              type: list
+              contains: [3]
+
+    - label: "Step 5b: TH reads optional event(StartUp) in EventList"
       PICS: BRBINFO.S.E00 && PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "EventList"
@@ -216,7 +237,7 @@
               type: list
               contains: [0]
 
-    - label: "Step 5b: TH reads optional attribute(ShutDown) in EventList"
+    - label: "Step 5c: TH reads optional attribute(ShutDown) in EventList"
       PICS: BRBINFO.S.E01 && PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "EventList"
@@ -225,7 +246,7 @@
               type: list
               contains: [1]
 
-    - label: "Step 5c: TH reads optional attribute(Leave) in EventList"
+    - label: "Step 5d TH reads optional attribute(Leave) in EventList"
       PICS: BRBINFO.S.E02 && PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "EventList"
diff --git a/src/app/tests/suites/certification/Test_TC_CNET_1_3.yaml b/src/app/tests/suites/certification/Test_TC_CNET_1_3.yaml
index b28b4fb..afa472a 100644
--- a/src/app/tests/suites/certification/Test_TC_CNET_1_3.yaml
+++ b/src/app/tests/suites/certification/Test_TC_CNET_1_3.yaml
@@ -12,9 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-name:
-    12.1.3. [TC-CNET-1.3] Global Attributes for Networking commissioning cluster
-    [DUT-Server]
+name: 12.1.3. [TC-CNET-1.3] Global Attributes with DUT as Server
 
 PICS:
     - CNET.S
@@ -33,7 +31,7 @@
               - name: "nodeId"
                 value: nodeId
 
-    - label: "Step 2: Read the global attribute: ClusterRevision"
+    - label: "Step 2: TH reads from the DUT the ClusterRevision attribute"
       command: "readAttribute"
       attribute: "ClusterRevision"
       response:
@@ -41,7 +39,7 @@
           constraints:
               type: int16u
 
-    - label: "Step 3a: Read the global attribute: FeatureMap"
+    - label: "Step 3a: TH reads from the DUT the FeatureMap attribute"
       PICS: " !CNET.S.F00 && !CNET.S.F01 && !CNET.S.F02 "
       command: "readAttribute"
       attribute: "FeatureMap"
@@ -49,7 +47,8 @@
           value: 0
 
     - label:
-          "Step 3b: Read the global attribute: FeatureMap when CNET.S.F00 is set"
+          "Step 3b: TH reads the global attribute: FeatureMap when CNET.S.F00 is
+          set"
       PICS: CNET.S.F00
       command: "readAttribute"
       attribute: "FeatureMap"
@@ -57,7 +56,8 @@
           value: 1
 
     - label:
-          "Step 3c: Read the global attribute: FeatureMap when CNET.S.F01 is set"
+          "Step 3c: TH reads the global attribute: FeatureMap when CNET.S.F01 is
+          set"
       PICS: CNET.S.F01
       command: "readAttribute"
       attribute: "FeatureMap"
@@ -65,14 +65,15 @@
           value: 2
 
     - label:
-          "Step 3d: Read the global attribute: FeatureMap when CNET.S.F02 is set"
+          "Step 3d: TH reads the global attribute: FeatureMap when CNET.S.F02 is
+          set"
       PICS: CNET.S.F02
       command: "readAttribute"
       attribute: "FeatureMap"
       response:
           value: 4
 
-    - label: "Step 4a: Read the global attribute: AttributeList"
+    - label: "Step 4a: TH reads from the DUT the AttributeList attribute"
       PICS: PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "AttributeList"
@@ -81,7 +82,7 @@
               type: list
               contains: [65528, 65529, 65530, 65531, 65532, 65533]
 
-    - label: "Step 4a: Read the global attribute: AttributeList"
+    - label: "Step 4b: TH reads from the DUT the AttributeList attribute."
       PICS: "!PICS_EVENT_LIST_ENABLED"
       command: "readAttribute"
       attribute: "AttributeList"
@@ -91,7 +92,7 @@
               contains: [65528, 65529, 65531, 65532, 65533]
 
     - label:
-          "Step 4b: Read mandatory attributes in AttributeList if
+          "Step 4c: TH reads mandatory attributes in AttributeList if
           CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) is true"
       PICS: CNET.S.F00 || CNET.S.F01 || CNET.S.F02
       command: "readAttribute"
@@ -102,9 +103,9 @@
               contains: [0, 1, 4, 5, 6, 7]
 
     - label:
-          "Step 4c: Read the optional attribute(ScanMaxTimeSeconds):
-          AttributeList"
-      PICS: CNET.S.A0002
+          "Step 4d: TH reads the feature dependent
+          attribute(ScanMaxTimeSeconds): AttributeList"
+      PICS: CNET.S.F00 || CNET.S.F01
       command: "readAttribute"
       attribute: "AttributeList"
       response:
@@ -113,9 +114,9 @@
               contains: [2]
 
     - label:
-          "Step 4d: Reading optional attribute(ConnectMaxTimeSeconds) in
-          AttributeList"
-      PICS: CNET.S.A0003
+          "Step 4e: TH reads the feature dependent
+          attribute(ConnectMaxTimeSeconds) in AttributeList"
+      PICS: CNET.S.F00 || CNET.S.F01
       command: "readAttribute"
       attribute: "AttributeList"
       response:
@@ -123,7 +124,29 @@
               type: list
               contains: [3]
 
-    - label: "Step 5: Read the global attribute: EventList"
+    - label:
+          "Step 4f: TH reads WIFI related attribute (SupportedWiFiBands) in
+          AttributeList"
+      PICS: CNET.S.F00
+      command: "readAttribute"
+      attribute: "AttributeList"
+      response:
+          constraints:
+              type: list
+              contains: [8]
+
+    - label:
+          "Step 4g: TH reads Thread related attribute (SupportedWiFiBands and
+          ThreadVersion) in AttributeList"
+      PICS: CNET.S.F01
+      command: "readAttribute"
+      attribute: "AttributeList"
+      response:
+          constraints:
+              type: list
+              contains: [9, 10]
+
+    - label: "Step 5: TH reads from the DUT the EventList attribute"
       PICS: PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "EventList"
@@ -133,8 +156,8 @@
               type: list
 
     - label:
-          "Step 6a: Read AcceptedCommandList If DUT supports Wi-Fi/Thread
-          related features CNET.S.F00(WI),CNET.S.F01(TH)"
+          "Step 6a: TH reads AcceptedCommandList attribute from DUT. If DUT
+          supports Wi-Fi/Thread related features CNET.S.F00(WI),CNET.S.F01(TH)"
       PICS: ( CNET.S.F00 || CNET.S.F01 )
       command: "readAttribute"
       attribute: "AcceptedCommandList"
@@ -144,8 +167,8 @@
               contains: [0, 4, 6, 8]
 
     - label:
-          "Step 6b: Read AcceptedCommandList If DUT supports Wi-Fi related
-          features (CNET.S.F00(WI) is true)"
+          "Step 6b: TH reads AcceptedCommandList attribute from DUT. If DUT
+          supports Wi-Fi related features (CNET.S.F00(WI) is true)"
       PICS: CNET.S.F00
       command: "readAttribute"
       attribute: "AcceptedCommandList"
@@ -155,8 +178,8 @@
               contains: [2]
 
     - label:
-          "Step 6c: Read AcceptedCommandList If DUT supports Thread related
-          features(CNET.S.F01(TH) is true)"
+          "Step 6c: TH reads AcceptedCommandList attribute from DUT. If DUT
+          supports Thread related features(CNET.S.F01(TH) is true)"
       PICS: CNET.S.F01
       command: "readAttribute"
       attribute: "AcceptedCommandList"
@@ -166,8 +189,8 @@
               contains: [3]
 
     - label:
-          "Step 6d: Read AcceptedCommandList If DUT supports Ethernet related
-          features(CNET.S.F02(TH) is true)"
+          "Step 6d: TH reads AcceptedCommandList attribute from DUT. If DUT
+          supports Ethernet related features(CNET.S.F02(TH) is true)"
       PICS: CNET.S.F02
       command: "readAttribute"
       attribute: "AcceptedCommandList"
@@ -175,8 +198,9 @@
           value: []
 
     - label:
-          "Step 7a: Read the GeneratedCommandList If DUT supports Wi-Fi/Thread
-          related features(CNET.S.F00(WI) or CNET.S.F01(TH) is true)"
+          "Step 7a: TH reads the GeneratedCommandList attribute from DUT. If DUT
+          supports Wi-Fi/Thread related features(CNET.S.F00(WI) or
+          CNET.S.F01(TH) is true)"
       PICS: ( CNET.S.F00 || CNET.S.F01 )
       command: "readAttribute"
       attribute: "GeneratedCommandList"
@@ -186,8 +210,8 @@
               contains: [1, 5, 7]
 
     - label:
-          "Step 7b: Read the GeneratedCommandList If DUT supports Ethernet
-          related features(CNET.S.F02(ET) must be true)"
+          "Step 7b: Read the GeneratedCommandList attribute from DUT. If DUT
+          supports Ethernet related features(CNET.S.F02(ET) must be true)"
       PICS: CNET.S.F02
       command: "readAttribute"
       attribute: "GeneratedCommandList"
diff --git a/src/app/tests/suites/certification/Test_TC_CNET_4_1.yaml b/src/app/tests/suites/certification/Test_TC_CNET_4_1.yaml
index ce3979c..fda0797 100644
--- a/src/app/tests/suites/certification/Test_TC_CNET_4_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_CNET_4_1.yaml
@@ -186,3 +186,12 @@
           value: null
           constraints:
               type: int32s
+
+    - label: "Step 14: TH reads the SupportedWiFiBands attribute from the DUT"
+      PICS: CNET.S.A0008
+      command: "readAttribute"
+      attribute: "SupportedWiFiBands"
+      response:
+          constraints:
+              type: enum8
+              minLength: 1
diff --git a/src/app/tests/suites/certification/Test_TC_CNET_4_2.yaml b/src/app/tests/suites/certification/Test_TC_CNET_4_2.yaml
index 7b60871..4ac1c8e 100644
--- a/src/app/tests/suites/certification/Test_TC_CNET_4_2.yaml
+++ b/src/app/tests/suites/certification/Test_TC_CNET_4_2.yaml
@@ -193,3 +193,26 @@
           value: null
           constraints:
               type: int32s
+
+    #Possibilites if Bit 4 (IsSynchronizedSleepyEndDeviceCapable) is only set if bit 2 (IsSleepyEndDeviceCapable) is also set expects value 20
+    #Verify that Bit 0 (IsBorderRouterCapable) is only set if bit 3 (IsFullThreadDevice) is also set expected value 9
+    #Verify that Bit 1 (IsRouterCapable) is only set if bit 3 (IsFullThreadDevice) is also set expected value 10
+    #So the possibilites of value here are in the range of 0-20 expected value as per test-plan [0, 4, 8, 9, 10, 16, 20]
+    - label:
+          "Step 14: TH reads the SupportedThreadFeatures attribute from the DUT"
+      PICS: CNET.S.A0009
+      command: "readAttribute"
+      attribute: "SupportedThreadFeatures"
+      response:
+          constraints:
+              type: bitmap16
+              anyOf: [0, 4, 8, 9, 10, 16, 20]
+
+    - label: "Step 15:TH reads the ThreadVersion attribute from the DUT"
+      PICS: CNET.S.A000A
+      command: "readAttribute"
+      attribute: "ThreadVersion"
+      response:
+          constraints:
+              type: int16u
+              minValue: 4
diff --git a/src/app/tests/suites/certification/Test_TC_CNET_4_5.yaml b/src/app/tests/suites/certification/Test_TC_CNET_4_5.yaml
index 23753cf..892ae4e 100644
--- a/src/app/tests/suites/certification/Test_TC_CNET_4_5.yaml
+++ b/src/app/tests/suites/certification/Test_TC_CNET_4_5.yaml
@@ -88,7 +88,7 @@
           "Step 2: TH sends RemoveNetwork command to the DUT with NetworkID
           field set to PIXIT.CNET.WIFI_1ST_ACCE SSPOINT_SSID and Breadcrumb
           field set to 1"
-      PICS: CNET.S.C04.Rsp
+      PICS: CNET.S.C02.Rsp && CNET.S.C04.Rsp
       command: "RemoveNetwork"
       arguments:
           values:
diff --git a/src/app/tests/suites/certification/Test_TC_CNET_4_9.yaml b/src/app/tests/suites/certification/Test_TC_CNET_4_9.yaml
index 341fe7d..a26524e 100644
--- a/src/app/tests/suites/certification/Test_TC_CNET_4_9.yaml
+++ b/src/app/tests/suites/certification/Test_TC_CNET_4_9.yaml
@@ -81,7 +81,9 @@
               - name: "DebugText"
                 value: ""
 
-    - label: "Step 2: TH reads Networks attribute from the DUT "
+    - label:
+          "Step 2: TH reads Networks attribute from the DUT and saves the number
+          of entries as 'NumNetworks' "
       PICS: CNET.S.A0001
       command: "readAttribute"
       attribute: "Networks"
@@ -201,6 +203,7 @@
     - label:
           "Step 10: TH reads Breadcrumb attribute from the General Commissioning
           cluster of the DUT"
+      PICS: CNET.S.C04.Rsp
       cluster: "General Commissioning"
       command: "readAttribute"
       attribute: "Breadcrumb"
@@ -277,6 +280,7 @@
                 value: 0
 
     - label: "Step 15: TH sends the CommissioningComplete command to the DUT"
+      PICS: CNET.S.C04.Rsp
       cluster: "General Commissioning"
       command: "CommissioningComplete"
       response:
diff --git a/src/app/tests/suites/certification/Test_TC_DD_3_1.yaml b/src/app/tests/suites/certification/Test_TC_DD_3_1.yaml
index 47def58..bfc8022 100644
--- a/src/app/tests/suites/certification/Test_TC_DD_3_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_DD_3_1.yaml
@@ -17,6 +17,7 @@
 
 PICS:
     - MCORE.ROLE.COMMISSIONEE
+    - "!MCORE.DD.NON_CONCURRENT_CONNECTION"
 
 config:
     nodeId: 0x12344321
diff --git a/src/app/tests/suites/certification/Test_TC_DD_3_2.yaml b/src/app/tests/suites/certification/Test_TC_DD_3_2.yaml
index 58a43e7..4814d35 100644
--- a/src/app/tests/suites/certification/Test_TC_DD_3_2.yaml
+++ b/src/app/tests/suites/certification/Test_TC_DD_3_2.yaml
@@ -18,6 +18,7 @@
 
 PICS:
     - MCORE.ROLE.COMMISSIONEE
+    - MCORE.DD.NON_CONCURRENT_CONNECTION
 
 config:
     nodeId: 0x12344321
@@ -298,7 +299,7 @@
 
     - label:
           "Step 9: Commissioner instructs Commissionee to connect to operational
-          network if not already connected"
+          network"
       verification: |
           Verify in TH(CHIP-TOOL)
 
diff --git a/src/app/tests/suites/certification/Test_TC_DGGEN_1_1.yaml b/src/app/tests/suites/certification/Test_TC_DGGEN_1_1.yaml
index 147242c..7342101 100644
--- a/src/app/tests/suites/certification/Test_TC_DGGEN_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_DGGEN_1_1.yaml
@@ -31,7 +31,7 @@
               - name: "nodeId"
                 value: nodeId
 
-    - label: "Step 2: Read the global attribute: ClusterRevision"
+    - label: "Step 2: TH reads from the DUT the ClusterRevision attribute."
       command: "readAttribute"
       attribute: "ClusterRevision"
       response:
@@ -39,7 +39,7 @@
           constraints:
               type: int16u
 
-    - label: "Step 3: Read the global attribute: FeatureMap"
+    - label: "Step 3: TH reads from the DUT the FeatureMap attribute."
       command: "readAttribute"
       attribute: "FeatureMap"
       response:
@@ -47,7 +47,7 @@
           constraints:
               type: bitmap32
 
-    - label: "Step 4a: Read the global attribute: AttributeList"
+    - label: "Step 4a: TH reads from the DUT the AttributeList attribute."
       PICS: PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "AttributeList"
@@ -56,7 +56,7 @@
               type: list
               contains: [0, 1, 8, 65528, 65529, 65530, 65531, 65532, 65533]
 
-    - label: "Step 4a: Read the global attribute: AttributeList"
+    - label: "Step 4a: TH reads from the DUT the AttributeList attribute."
       PICS: "!PICS_EVENT_LIST_ENABLED"
       command: "readAttribute"
       attribute: "AttributeList"
@@ -68,6 +68,7 @@
     - label:
           "Step 4b: Validate presence of mandatory attribute(UpTime) in
           AttributeList"
+      PICS: DGGEN.S.A0002
       command: "readAttribute"
       attribute: "AttributeList"
       response:
@@ -76,7 +77,7 @@
               contains: [2]
 
     - label:
-          "Step 4c: Read optional attribute(TotalOperationalHours) in
+          "Step 4c: TH reads optional attribute(TotalOperationalHours) in
           AttributeList"
       PICS: DGGEN.S.A0003
       command: "readAttribute"
@@ -86,7 +87,7 @@
               type: list
               contains: [3]
 
-    - label: "Step 4d: Read optional attribute(BootReason) in AttributeList"
+    - label: "Step 4d: TH reads optional attribute(BootReason) in AttributeList"
       PICS: DGGEN.S.A0004
       command: "readAttribute"
       attribute: "AttributeList"
@@ -96,7 +97,7 @@
               contains: [4]
 
     - label:
-          "Step 4e: Read optional attribute(ActiveHardwareFaults) in
+          "Step 4e: TH reads optional attribute(ActiveHardwareFaults) in
           AttributeList"
       PICS: DGGEN.S.A0005
       command: "readAttribute"
@@ -107,7 +108,8 @@
               contains: [5]
 
     - label:
-          "Step 4f: Read optional attribute(ActiveRadioFaults) in AttributeList"
+          "Step 4f: TH reads optional attribute(ActiveRadioFaults) in
+          AttributeList"
       PICS: DGGEN.S.A0006
       command: "readAttribute"
       attribute: "AttributeList"
@@ -117,7 +119,7 @@
               contains: [6]
 
     - label:
-          "Step 4g: Read optional attribute(ActiveNetworkFaults) in
+          "Step 4g: TH reads optional attribute(ActiveNetworkFaults) in
           AttributeList"
       PICS: DGGEN.S.A0007
       command: "readAttribute"
@@ -127,7 +129,7 @@
               type: list
               contains: [7]
 
-    - label: "Step 5a: Read the global attribute: EventList"
+    - label: "Step 5a: TH reads from the DUT the EventList attribute"
       PICS: PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "EventList"
@@ -136,7 +138,8 @@
               type: list
               contains: [3]
 
-    - label: "Step 5b: Read optional event(HardwareFaultChange) in EventList"
+    - label:
+          "Step 5b: TH reads optional event(HardwareFaultChange) in EventList"
       PICS: DGGEN.S.E00 && PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "EventList"
@@ -145,7 +148,7 @@
               type: list
               contains: [0]
 
-    - label: "Step 5c: Read optional event(RadioFaultChange) in EventList"
+    - label: "Step 5c: TH reads optional event(RadioFaultChange) in EventList"
       PICS: DGGEN.S.E01 && PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "EventList"
@@ -154,7 +157,7 @@
               type: list
               contains: [1]
 
-    - label: "Step 5d: Read optional event(NetworkFaultChange) in EventList"
+    - label: "Step 5d: TH reads optional event(NetworkFaultChange) in EventList"
       PICS: DGGEN.S.E02 && PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "EventList"
@@ -163,7 +166,7 @@
               type: list
               contains: [2]
 
-    - label: "Step 6: Read the global attribute: AcceptedCommandList"
+    - label: "Step 6: TH reads from the DUT the AcceptedCommandList attribute"
       command: "readAttribute"
       attribute: "AcceptedCommandList"
       response:
@@ -171,7 +174,7 @@
               type: list
               contains: [0, 1]
 
-    - label: "Step 7: TH reads GeneratedCommandList from DUT"
+    - label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute"
       command: "readAttribute"
       attribute: "GeneratedCommandList"
       response:
diff --git a/src/app/tests/suites/certification/Test_TC_DISHM_3_1.yaml b/src/app/tests/suites/certification/Test_TC_DISHM_3_1.yaml
index e426296..7d00383 100644
--- a/src/app/tests/suites/certification/Test_TC_DISHM_3_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_DISHM_3_1.yaml
@@ -13,10 +13,13 @@
 # limitations under the License.
 # Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default
 
-name: 263.4.1. [TC-DISHM-3.1] OnMode verification with DUT as Server
+name: 263.4.1. [TC-DISHM-3.1] On Mode functionality with DUT as Server
 
 PICS:
-    - DISHM.S
+    - DISHM.S.A0003
+    - DISHM.S.F00
+    - OO.S.C00.Rsp
+    - OO.S.C01.Rsp
 
 config:
     nodeId: 0x12344321
diff --git a/src/app/tests/suites/certification/Test_TC_DISHM_3_2.yaml b/src/app/tests/suites/certification/Test_TC_DISHM_3_2.yaml
index dfb4d89..9043b8f 100644
--- a/src/app/tests/suites/certification/Test_TC_DISHM_3_2.yaml
+++ b/src/app/tests/suites/certification/Test_TC_DISHM_3_2.yaml
@@ -13,10 +13,10 @@
 # limitations under the License.
 # Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default
 
-name: 263.4.2. [TC-DISHM-3.2] StartUpMode verification with DUT as Server
+name: 263.4.2. [TC-DISHM-3.2] Startup Mode functionality with DUT as Server
 
 PICS:
-    - DISHM.S
+    - DISHM.S.A0002
 
 config:
     nodeId: 0x12344321
diff --git a/src/app/tests/suites/certification/Test_TC_DISHM_3_3.yaml b/src/app/tests/suites/certification/Test_TC_DISHM_3_3.yaml
index 2b394a4..6a34bb3 100644
--- a/src/app/tests/suites/certification/Test_TC_DISHM_3_3.yaml
+++ b/src/app/tests/suites/certification/Test_TC_DISHM_3_3.yaml
@@ -13,10 +13,15 @@
 # limitations under the License.
 # Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default
 
-name: 189.3.3.[TC-DISHM-3.3] OnMode overwriting StartUpMode with DUT as Server
+name:
+    189.3.3.[TC-DISHM-3.3] On Mode and Startup Mode functionality with DUT as
+    Server
 
 PICS:
-    - DISHM.S
+    - DISHM.S.A0002
+    - DISHM.S.A0003
+    - DISHM.S.F00
+    - OO.S.A4003
 
 config:
     nodeId: 0x12344321
diff --git a/src/app/tests/suites/certification/Test_TC_DRLK_2_1.yaml b/src/app/tests/suites/certification/Test_TC_DRLK_2_1.yaml
index b049f65..a1a9ac1 100755
--- a/src/app/tests/suites/certification/Test_TC_DRLK_2_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_DRLK_2_1.yaml
@@ -160,8 +160,10 @@
       response:
           value: LockStateValue
 
-    - label: "Step 1d: TH sends a Lock Door command to the DUT."
-      PICS: DRLK.S.C00.Rsp && DRLK.S.F00 && DRLK.S.F07
+    - label:
+          "Step 1d: TH sends a Lock Door command to the DUT. If DRLK.S.F00(PIN)
+          & DRLK.S.F07(COTA), include a Valid PINCode in the Lock Door command."
+      PICS: DRLK.S.C00.Rsp && DRLK.S.F00 && DRLK.S.F07 && DRLK.S.A0000
       command: "LockDoor"
       timedInteractionTimeoutMs: 1000
       arguments:
@@ -170,7 +172,7 @@
                 value: "123456"
 
     - label: "Step 1d: TH sends a Lock Door command to the DUT."
-      PICS: DRLK.S.C00.Rsp && !DRLK.S.F00 && !DRLK.S.F07
+      PICS: DRLK.S.C00.Rsp && !DRLK.S.F00 && !DRLK.S.F07 && DRLK.S.A0000
       command: "LockDoor"
       timedInteractionTimeoutMs: 1000
 
@@ -190,13 +192,16 @@
       response:
           value: 1
 
-    - label: "Step 1e: TH sends a Unlock Door command to the DUT."
-      PICS: DRLK.S.C01.Rsp && !DRLK.S.F00 && !DRLK.S.F07
+    - label:
+          "Step 1e: TH sends a Unlock Door command to the DUT. If
+          DRLK.S.F00(PIN) & DRLK.S.F07(COTA), include a Valid PINCode in the
+          Unlock Door command"
+      PICS: DRLK.S.C01.Rsp && !DRLK.S.F00 && !DRLK.S.F07 && DRLK.S.A0000
       command: "UnlockDoor"
       timedInteractionTimeoutMs: 1000
 
     - label: "Step 1e: TH sends a Unlock Door command to the DUT."
-      PICS: DRLK.S.C01.Rsp && DRLK.S.F00 && DRLK.S.F07
+      PICS: DRLK.S.C01.Rsp && DRLK.S.F00 && DRLK.S.F07 && DRLK.S.A0000
       command: "UnlockDoor"
       timedInteractionTimeoutMs: 1000
       arguments:
@@ -602,7 +607,7 @@
     - label:
           "Step 13a: TH reads NumberOfHoliDay SchedulesSupported attribute from
           DUT"
-      PICS: DRLK.S.F0b && DRLK.S.A0016
+      PICS: DRLK.S.F0b && DRLK.S.A0015
       command: "readAttribute"
       attribute: "NumberOfHolidaySchedulesSupported"
       response:
@@ -1325,8 +1330,8 @@
 
     - label: "Step 31b: TH writes WrongCodeEntryLimit attribute as 8"
       PICS:
-          ( DRLK.S.F00 || DRLK.S.F01 ) &&
-          DRLK.S.M.WrongCodeEntryLimitAttributeWritable
+          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030 &&
+          DRLK.S.M.WrongCodeEntryLimitAttributeWritable "
       command: "writeAttribute"
       attribute: "WrongCodeEntryLimit"
       arguments:
@@ -1334,7 +1339,7 @@
 
     - label: "Step 31b: TH writes WrongCodeEntryLimit attribute as 8"
       PICS:
-          " ( DRLK.S.F00 || DRLK.S.F01 ) &&
+          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030 &&
           !DRLK.S.M.WrongCodeEntryLimitAttributeWritable "
       command: "writeAttribute"
       attribute: "WrongCodeEntryLimit"
@@ -1345,8 +1350,8 @@
 
     - label: "Step 31c: TH reads WrongCode EntryLimit attribute"
       PICS:
-          ( DRLK.S.F00 || DRLK.S.F01 ) &&
-          DRLK.S.M.WrongCodeEntryLimitAttributeWritable
+          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030 &&
+          DRLK.S.M.WrongCodeEntryLimitAttributeWritable "
       command: "readAttribute"
       attribute: "WrongCodeEntryLimit"
       response:
@@ -1354,7 +1359,7 @@
 
     - label: "Step 31c: TH reads WrongCode EntryLimit attribute"
       PICS:
-          " ( DRLK.S.F00 || DRLK.S.F01 ) &&
+          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030 &&
           !DRLK.S.M.WrongCodeEntryLimitAttributeWritable "
       command: "readAttribute"
       attribute: "WrongCodeEntryLimit"
@@ -1376,8 +1381,8 @@
 
     - label: "Step 32b: TH writes UserCodeTemporaryDisableTime attribute as 120"
       PICS:
-          ( DRLK.S.F00 || DRLK.S.F01 ) &&
-          DRLK.S.M.UserCodedTemporaryDisableTimeAttributeWritable
+          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031 &&
+          DRLK.S.M.UserCodedTemporaryDisableTimeAttributeWritable "
       command: "writeAttribute"
       attribute: "UserCodeTemporaryDisableTime"
       arguments:
@@ -1385,7 +1390,7 @@
 
     - label: "Step 32b: TH writes UserCodeTemporaryDisableTime attribute as 120"
       PICS:
-          " ( DRLK.S.F00 || DRLK.S.F01 ) &&
+          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031 &&
           !DRLK.S.M.UserCodedTemporaryDisableTimeAttributeWritable "
       command: "writeAttribute"
       attribute: "UserCodeTemporaryDisableTime"
@@ -1396,8 +1401,8 @@
 
     - label: "Step 32c: TH reads UserCodeTemporary DisableTime attribute"
       PICS:
-          ( DRLK.S.F00 || DRLK.S.F01 ) &&
-          DRLK.S.M.UserCodedTemporaryDisableTimeAttributeWritable
+          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031 &&
+          DRLK.S.M.UserCodedTemporaryDisableTimeAttributeWritable "
       command: "readAttribute"
       attribute: "UserCodeTemporaryDisableTime"
       response:
@@ -1405,7 +1410,7 @@
 
     - label: "Step 32c: TH reads UserCodeTemporary DisableTime attribute"
       PICS:
-          " ( DRLK.S.F00 || DRLK.S.F01 ) &&
+          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031 &&
           !DRLK.S.M.UserCodedTemporaryDisableTimeAttributeWritable "
       command: "readAttribute"
       attribute: "UserCodeTemporaryDisableTime"
diff --git a/src/app/tests/suites/certification/Test_TC_FLW_2_2.yaml b/src/app/tests/suites/certification/Test_TC_FLW_2_2.yaml
index 64d7aa8..9586e9e 100644
--- a/src/app/tests/suites/certification/Test_TC_FLW_2_2.yaml
+++ b/src/app/tests/suites/certification/Test_TC_FLW_2_2.yaml
@@ -23,7 +23,9 @@
     endpoint: 1
 
 tests:
-    - label: "Step 1: Wait for the commissioned device to be retrieved"
+    - label:
+          "Step 1: Commission DUT to TH (can be skipped if done in a preceding
+          test)."
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -31,7 +33,7 @@
               - name: "nodeId"
                 value: nodeId
 
-    - label: "Step 2: Read the mandatory attribute: MeasuredValue"
+    - label: "Step 2: TH reads from the DUT the MeasuredValue attribute."
       PICS: FLW.S.A0000
       command: "readAttribute"
       attribute: "MeasuredValue"
@@ -40,7 +42,7 @@
           constraints:
               type: int16u
               minValue: 0
-              maxValue: 65535
+              maxValue: 65534
 
     - label: "Step 3: Operate on device to change the flow significantly"
       cluster: "LogCommands"
@@ -53,7 +55,9 @@
               - name: "expectedValue"
                 value: "y"
 
-    - label: "Step 4: Read the mandatory attribute: MeasuredValue"
+    - label:
+          "Step 4: After a few seconds, TH reads from the DUT the MeasuredValue
+          attribute."
       PICS: FLW.S.A0000 && FLW.M.FlowChange
       command: "readAttribute"
       attribute: "MeasuredValue"
@@ -61,5 +65,5 @@
           constraints:
               type: int16u
               minValue: 0
-              maxValue: 65535
+              maxValue: 65534
               notValue: ValueBeforeChange
diff --git a/src/app/tests/suites/certification/Test_TC_G_2_4.yaml b/src/app/tests/suites/certification/Test_TC_G_2_4.yaml
index 2941e03..25f8582 100644
--- a/src/app/tests/suites/certification/Test_TC_G_2_4.yaml
+++ b/src/app/tests/suites/certification/Test_TC_G_2_4.yaml
@@ -32,7 +32,9 @@
     Groups.Endpoint2: 2
 
 tests:
-    - label: "Step 1: Wait for the commissioned device to be retrieved"
+    - label:
+          "Step 1: Commission DUT to TH (can be skipped if done in a preceding
+          test)."
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -58,7 +60,13 @@
 
     - label:
           "Step 2: TH sends KeySetWrite command in the GroupKeyManagement
-          cluster to DUT."
+          cluster to DUT on EP0 using a key that is pre-installed on the TH.
+          GroupKeySet fields are as follows: 1)GroupKeySetID: 1
+          2)GroupKeySecurityPolicy: TrustFirst (0) 3)EpochKey0:
+          d0d1d2d3d4d5d6d7d8d9dadbdcdddedf 4)EpochStartTime0: 1 5)EpochKey1:
+          d1d1d2d3d4d5d6d7d8d9dadbdcdddedf 6)EpochStartTime1:
+          18446744073709551613 7)EpochKey2: d2d1d2d3d4d5d6d7d8d9dadbdcdddedf
+          8)EpochStartTime2: 18446744073709551614"
       PICS: GRPKEY.S.C00.Rsp
       cluster: "Group Key Management"
       command: "KeySetWrite"
@@ -102,7 +110,7 @@
 
     - label:
           "Step 5a: TH sends AddGroup command to DUT on PIXIT.G.ENDPOINT with
-          the following fields: GroupID as 0x0001,GroupName as 'Gp1'"
+          the following fields:1) GroupID as 0x0001, 2)GroupName as 'Gp1'"
       PICS: G.S.C00.Rsp && G.S.C00.Tx
       endpoint: Groups.Endpoint1
       command: "AddGroup"
diff --git a/src/app/tests/suites/certification/Test_TC_ICDM_2_3.yaml b/src/app/tests/suites/certification/Test_TC_ICDM_2_3.yaml
deleted file mode 100644
index eed0da8..0000000
--- a/src/app/tests/suites/certification/Test_TC_ICDM_2_3.yaml
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (c) 2023 Project CHIP Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default
-
-name: 214.2.3. [TC-ICDM-2.3] Secondary functionality with DUT as Server
-
-PICS:
-    - ICDM.S
-    - ICDM.S.C00.Rsp
-    - ICDM.S.C02.Rsp
-    - ICDM.S.C03.Rsp
-
-config:
-    nodeId: 0x12344321
-    cluster: "Basic Information"
-    endpoint: 0
-
-tests:
-    - label: "Step 1: TH reads from the DUT the ActiveModeThreshold attribute."
-      PICS: ICDM.S.A0002
-      verification: |
-          ./chip-tool icdmanagement read active-mode-threshold 1 0
-
-          On TH(chip-tool) log, Verify ActiveModeThreshold attribute should contains an uint16; value is 300 or higher below is the sample log provided for the raspi platform:
-
-
-          [1685127625953] [48160:461013] [TOO] Endpoint: 0 Cluster: 0x0000_0046 Attribute 0x0000_0002 DataVersion: 326159709
-          [1685127625953] [48160:461013] [TOO]   ActiveModeThreshold: 300
-      disabled: true
-
-    - label: "Step 2: TH sends StayActiveRequest command."
-      PICS: ICDM.S.C03.Rsp
-      verification: |
-          Verify DUT responds w/ status SUCCESS(0x00).
-      disabled: true
-
-    - label:
-          "Step 3: Verify DUT increases the remaining time in active mode by one
-          ActiveModeThreshold"
-      PICS: ICDM.S.C03.Rsp
-      verification: |
-          Design details pending.
-      disabled: true
diff --git a/src/app/tests/suites/certification/Test_TC_I_2_3.yaml b/src/app/tests/suites/certification/Test_TC_I_2_3.yaml
index b314230..379ed42 100644
--- a/src/app/tests/suites/certification/Test_TC_I_2_3.yaml
+++ b/src/app/tests/suites/certification/Test_TC_I_2_3.yaml
@@ -16,6 +16,7 @@
 
 PICS:
     - I.S
+    - I.S.C40.Rsp
 
 config:
     nodeId: 0x12344321
@@ -23,7 +24,9 @@
     endpoint: 1
 
 tests:
-    - label: "Step 1: Wait for the commissioned device to be retrieved"
+    - label:
+          "Step 1: Commission DUT to TH (can be skipped if done in a preceding
+          test)."
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -32,9 +35,9 @@
                 value: nodeId
 
     - label:
-          "Step 2a: TH sends TriggerEffect command to DUT with the effect
-          identifier field set to 0x00 blink and the effect variant field set to
-          0x00 default"
+          "Step 2a: TH sends TriggerEffect command to DUT, with the effect
+          identifier field set to 0x00 (blink) and the effect variant field set
+          to 0x00 (default)"
       PICS: I.S.C40.Rsp
       command: "TriggerEffect"
       arguments:
@@ -56,9 +59,9 @@
                 value: "y"
 
     - label:
-          "Step 2b: TH sends TriggerEffect command to DUT with the effect
-          identifier field set to 0x01 breathe and the effect variant field set
-          to 0x00 default"
+          "Step 2b: TH sends TriggerEffect command to DUT, with the effect
+          identifier field set to 0x01 (breathe) and the effect variant field
+          set to 0x00 (default)."
       PICS: I.S.C40.Rsp
       command: "TriggerEffect"
       arguments:
@@ -80,9 +83,9 @@
                 value: "y"
 
     - label:
-          "Step 2c: TH sends TriggerEffect command to DUT with the effect
-          identifier field set to 0x02 okay and the effect variant field set to
-          0x00 default"
+          "Step 2c: TH sends TriggerEffect command to DUT, with the effect
+          identifier field set to 0x02 (okay) and the effect variant field set
+          to 0x00 (default)."
       PICS: I.S.C40.Rsp
       command: "TriggerEffect"
       arguments:
@@ -104,9 +107,9 @@
                 value: "y"
 
     - label:
-          "Step 2d: TH sends TriggerEffect command to DUT with the effect
-          identifier field set to 0x0b channel change and the effect variant
-          field set to 0x00 default"
+          "Step 2d:TH sends TriggerEffect command to DUT, with the effect
+          identifier field set to 0x0b (channel change) and the effect variant
+          field set to 0x00 (default)."
       PICS: I.S.C40.Rsp
       command: "TriggerEffect"
       arguments:
@@ -128,9 +131,9 @@
                 value: "y"
 
     - label:
-          "Step 2e: TH sends TriggerEffect command to DUT with the effect
-          identifier field set to 0x01 breathe and the effect variant field set
-          to 0x00 default"
+          "Step 2e: TH sends TriggerEffect command to DUT, with the effect
+          identifier field set to 0x01 (breathe) and the effect variant field
+          set to 0x00 (default)."
       PICS: I.S.C40.Rsp
       command: "TriggerEffect"
       arguments:
@@ -152,9 +155,9 @@
                 value: "y"
 
     - label:
-          "Step 2f: TH sends TriggerEffect command to DUT with the effect
-          identifier field set to 0xfe finish effect and the effect variant
-          field set to 0x00 default"
+          "Step 2f: TH sends TriggerEffect command to DUT, with the effect
+          identifier field set to 0xfe (finish effect) and the effect variant
+          field set to 0x00 (default)."
       PICS: I.S.C40.Rsp
       command: "TriggerEffect"
       arguments:
@@ -176,9 +179,9 @@
                 value: "y"
 
     - label:
-          "Step 2g: TH sends TriggerEffect command to DUT with the effect
-          identifier field set to 0x01 breathe and the effect variant field set
-          to 0x00 default"
+          "Step 2g: TH sends TriggerEffect command to DUT, with the effect
+          identifier field set to 0x01 (breathe) and the effect variant field
+          set to 0x00 (default)."
       PICS: I.S.C40.Rsp
       command: "TriggerEffect"
       arguments:
@@ -200,9 +203,9 @@
                 value: "y"
 
     - label:
-          "Step 2h: TH sends TriggerEffect command to DUT with the effect
-          identifier field set to 0xff stop effect and the effect variant field
-          set to 0x00 default"
+          "Step 2h: TH sends TriggerEffect command to DUT, with the effect
+          identifier field set to 0xff (stop effect) and the effect variant
+          field set to 0x00 (default)."
       PICS: I.S.C40.Rsp
       command: "TriggerEffect"
       arguments:
@@ -224,9 +227,9 @@
                 value: "y"
 
     - label:
-          "Step 3a: TH sends TriggerEffect command to DUT with the effect
-          identifier field set to 0x00 blink and the effect variant field set to
-          0x42 unknown"
+          "Step 3a: TH sends TriggerEffect command to DUT, with the effect
+          identifier field set to 0x00 (blink) and the effect variant field set
+          to 0x42 (unknown)."
       PICS: I.S.C40.Rsp
       command: "TriggerEffect"
       arguments:
@@ -248,9 +251,9 @@
                 value: "y"
 
     - label:
-          "Step 3b: TH sends TriggerEffect command to DUT with the effect
-          identifier field set to 0xff stop effect and the effect variant field
-          set to 0x00 default"
+          "Step 3b: TH sends TriggerEffect command to DUT, with the effect
+          identifier field set to 0xff (stop effect) and the effect variant
+          field set to 0x00 (default)."
       PICS: I.S.C40.Rsp
       command: "TriggerEffect"
       arguments:
diff --git a/src/app/tests/suites/certification/Test_TC_LCFG_2_1.yaml b/src/app/tests/suites/certification/Test_TC_LCFG_2_1.yaml
index fac7434..2dae158 100644
--- a/src/app/tests/suites/certification/Test_TC_LCFG_2_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_LCFG_2_1.yaml
@@ -37,7 +37,9 @@
         defaultValue: "es-ES"
 
 tests:
-    - label: "Step 0: Wait for the commissioned device to be retrieved"
+    - label:
+          "Step 0: Commission DUT to TH (can be skipped if done in a preceding
+          test)."
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -46,7 +48,7 @@
                 value: nodeId
 
     - label: "Step 1a: TH reads SupportedLocales attribute from DUT"
-      PICS: LCFG.S.A0001
+      PICS: LCFG.S.A0000
       command: "readAttribute"
       attribute: "SupportedLocales"
       response:
@@ -79,7 +81,7 @@
           error: UNSUPPORTED_WRITE
 
     - label: "Step 3: TH reads SupportedLocales attribute from DUT"
-      PICS: LCFG.S.A0001
+      PICS: LCFG.S.A0000
       command: "readAttribute"
       attribute: "SupportedLocales"
       response:
diff --git a/src/app/tests/suites/certification/Test_TC_LVL_1_1.yaml b/src/app/tests/suites/certification/Test_TC_LVL_1_1.yaml
index 969f09c..76ca0f3 100644
--- a/src/app/tests/suites/certification/Test_TC_LVL_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_LVL_1_1.yaml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-name: 18.1.1. [TC-LVL-1.1] Global attributes with server as DUT
+name: 18.1.1. [TC-LVL-1.1] Global Attributes with DUT as Server
 
 PICS:
     - LVL.S
@@ -23,7 +23,9 @@
     endpoint: 1
 
 tests:
-    - label: "Step 0: Wait for the commissioned device to be retrieved"
+    - label:
+          "Step 1: Commission DUT to TH (can be skipped if done in a preceding
+          test)."
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -31,7 +33,7 @@
               - name: "nodeId"
                 value: nodeId
 
-    - label: "Step 1: Read the global attribute: ClusterRevision"
+    - label: "Step 2: TH reads from the DUT the ClusterRevision attribute."
       command: "readAttribute"
       attribute: "ClusterRevision"
       response:
@@ -39,7 +41,7 @@
           constraints:
               type: int16u
 
-    - label: "Step 2a: Read the global attribute: FeatureMap"
+    - label: "Step 3a: TH reads from the DUT the FeatureMap attribute."
       PICS: " !LVL.S.F00 && !LVL.S.F01 && !LVL.S.F02 "
       command: "readAttribute"
       attribute: "FeatureMap"
@@ -49,7 +51,7 @@
               type: bitmap32
 
     - label:
-          "Step 2b: Given LVL.S.F00(OO) ensure featuremap has the correct bit
+          "Step 3b: Given LVL.S.F00(OO) ensure featuremap has the correct bit
           set"
       PICS: LVL.S.F00
       command: "readAttribute"
@@ -60,7 +62,7 @@
               hasMasksSet: [0x1]
 
     - label:
-          "Step 2c: Given LVL.S.F01(LT) ensure featuremap has the correct bit
+          "Step 3c: Given LVL.S.F01(LT) ensure featuremap has the correct bit
           set"
       PICS: LVL.S.F01
       command: "readAttribute"
@@ -71,7 +73,7 @@
               hasMasksSet: [0x2]
 
     - label:
-          "Step 2d: Given LVL.S.F02(FQ) ensure featuremap has the correct bit
+          "Step 3d: Given LVL.S.F02(FQ) ensure featuremap has the correct bit
           set"
       PICS: LVL.S.F02
       command: "readAttribute"
@@ -81,7 +83,7 @@
               type: bitmap32
               hasMasksSet: [0x4]
 
-    - label: "Step 3a: Read the global attribute: AttributeList"
+    - label: "Step 4: TH reads from the DUT the AttributeList attribute."
       PICS: PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "AttributeList"
@@ -90,7 +92,7 @@
               type: list
               contains: [0, 15, 17, 65528, 65529, 65530, 65531, 65532, 65533]
 
-    - label: "Step 3a: Read the global attribute: AttributeList"
+    - label: "Step 4: TH reads from the DUT the AttributeList attribute."
       PICS: "!PICS_EVENT_LIST_ENABLED"
       command: "readAttribute"
       attribute: "AttributeList"
@@ -100,7 +102,7 @@
               contains: [0, 15, 17, 65528, 65529, 65531, 65532, 65533]
 
     - label:
-          "Step 3b: Read the optional attribute(StartUpCurrentLevel and
+          "Step 4a: TH reads the optional attribute(StartUpCurrentLevel and
           RemainingTime) in AttributeList"
       PICS: LVL.S.F01
       command: "readAttribute"
@@ -111,8 +113,8 @@
               contains: [1, 16384]
 
     - label:
-          "Step 3c: Read the optional attribute(CurrentFrequency, MinFrequency
-          and MinFrequency) in AttributeList"
+          "Step 4b: TH reads the optional attribute(CurrentFrequency,
+          MinFrequency and MinFrequency) in AttributeList"
       PICS: LVL.S.F02
       command: "readAttribute"
       attribute: "AttributeList"
@@ -121,7 +123,8 @@
               type: list
               contains: [4, 5, 6]
 
-    - label: "Step 3d: Read the optional attribute(MinLevel) in AttributeList"
+    - label:
+          "Step 4c: TH reads the optional attribute(MinLevel) in AttributeList"
       PICS: LVL.S.A0002
       command: "readAttribute"
       attribute: "AttributeList"
@@ -130,7 +133,8 @@
               type: list
               contains: [2]
 
-    - label: "Step 3e: Read the optional attribute(MaxLevel) in AttributeList"
+    - label:
+          "Step 4d: TH reads the optional attribute(MaxLevel) in AttributeList"
       PICS: LVL.S.A0003
       command: "readAttribute"
       attribute: "AttributeList"
@@ -140,7 +144,7 @@
               contains: [3]
 
     - label:
-          "Step 3f: Read the optional attribute(OnOffTransitionTime) in
+          "Step 4e: TH reads the optional attribute(OnOffTransitionTime) in
           AttributeList"
       PICS: LVL.S.A0010
       command: "readAttribute"
@@ -151,7 +155,7 @@
               contains: [16]
 
     - label:
-          "Step 3g: Read the optional attribute(OnTransitionTime) in
+          "Step 4f: TH reads the optional attribute(OnTransitionTime) in
           AttributeList"
       PICS: LVL.S.A0012
       command: "readAttribute"
@@ -162,7 +166,7 @@
               contains: [18]
 
     - label:
-          "Step 3h: Read the optional attribute(OffTransitionTime) in
+          "Step 4g: TH reads the optional attribute(OffTransitionTime) in
           AttributeList"
       PICS: LVL.S.A0013
       command: "readAttribute"
@@ -173,7 +177,7 @@
               contains: [19]
 
     - label:
-          "Step 3i: Read the optional attribute(DefaultMoveRate) in
+          "Step 4h: TH reads the optional attribute(DefaultMoveRate) in
           AttributeList"
       PICS: LVL.S.A0014
       command: "readAttribute"
@@ -183,7 +187,16 @@
               type: list
               contains: [20]
 
-    - label: "Step 4a: Read the global attribute: AcceptedCommandList"
+    - label: "Step 5: Read the global attribute: EventList"
+      PICS: PICS_EVENT_LIST_ENABLED
+      command: "readAttribute"
+      attribute: "EventList"
+      response:
+          value: []
+          constraints:
+              type: list
+
+    - label: "Step 6a: TH reads from the DUT the AcceptedCommandList attribute."
       command: "readAttribute"
       attribute: "AcceptedCommandList"
       response:
@@ -192,7 +205,7 @@
               contains: [0, 1, 2, 3, 4, 5, 6, 7]
 
     - label:
-          "Step 4a.1: Read the Feature-dependent(LVL.S.F02) command in
+          "Step 6a.1: TH reads the Feature-dependent(LVL.S.F02) command in
           AcceptedCommandList"
       PICS: LVL.S.F02
       command: "readAttribute"
@@ -202,19 +215,10 @@
               type: list
               contains: [8]
 
-    - label: "Step 4b: Read the global attribute: GeneratedCommandList"
+    - label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute."
       command: "readAttribute"
       attribute: "GeneratedCommandList"
       response:
           value: []
           constraints:
               type: list
-
-    - label: "Step 5: Read the global attribute: EventList"
-      PICS: PICS_EVENT_LIST_ENABLED
-      command: "readAttribute"
-      attribute: "EventList"
-      response:
-          value: []
-          constraints:
-              type: list
diff --git a/src/app/tests/suites/certification/Test_TC_LWM_2_1.yaml b/src/app/tests/suites/certification/Test_TC_LWM_2_1.yaml
index ebea6a0..a6a916f 100644
--- a/src/app/tests/suites/certification/Test_TC_LWM_2_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_LWM_2_1.yaml
@@ -82,7 +82,9 @@
     - label:
           "Step 5: Manually put the device in a state from which it will FAIL to
           transition to PIXIT.LWM.MODE_CHANGE_FAIL"
-      PICS: LWM.S.M.CAN_TEST_MODE_FAILURE && PICS_SKIP_SAMPLE_APP
+      PICS:
+          LWM.S.M.CAN_TEST_MODE_FAILURE && LWM.S.M.CAN_MANUALLY_CONTROLLED &&
+          PICS_SKIP_SAMPLE_APP
       verification: |
           Manual operation required
       cluster: "LogCommands"
@@ -95,7 +97,7 @@
                 value: "y"
 
     - label: "Step 6: TH reads from the DUT the CurrentMode attribute."
-      PICS: LWM.S.A0001
+      PICS: LWM.S.A0001 && LWM.S.M.CAN_MANUALLY_CONTROLLED
       command: "readAttribute"
       attribute: "CurrentMode"
       response:
@@ -184,7 +186,7 @@
     - label:
           "Step 9: Manually put the device in a state from which it will
           SUCCESSFULLY transition to PIXIT.LWM.MODE_CHANGE_OK"
-      PICS: PICS_SKIP_SAMPLE_APP
+      PICS: LWM.S.M.CAN_MANUALLY_CONTROLLED && PICS_SKIP_SAMPLE_APP
       verification: |
           Manual operation required
       cluster: "LogCommands"
@@ -197,7 +199,7 @@
                 value: "y"
 
     - label: "Step 10: TH reads from the DUT the CurrentMode attribute."
-      PICS: LWM.S.A0001
+      PICS: LWM.S.M.CAN_MANUALLY_CONTROLLED && LWM.S.A0001
       command: "readAttribute"
       attribute: "CurrentMode"
       response:
diff --git a/src/app/tests/suites/certification/Test_TC_LWM_3_1.yaml b/src/app/tests/suites/certification/Test_TC_LWM_3_1.yaml
index 2c39403..0b9a36e 100644
--- a/src/app/tests/suites/certification/Test_TC_LWM_3_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_LWM_3_1.yaml
@@ -17,6 +17,8 @@
 PICS:
     - LWM.S.A0003
     - LWM.S.F00
+    - OO.S.C00.Rsp
+    - OO.S.C01.Rsp
 
 config:
     nodeId: 0x12344321
diff --git a/src/app/tests/suites/certification/Test_TC_OO_1_1.yaml b/src/app/tests/suites/certification/Test_TC_OO_1_1.yaml
index 22b7f89..400bf68 100644
--- a/src/app/tests/suites/certification/Test_TC_OO_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_OO_1_1.yaml
@@ -33,6 +33,7 @@
               - name: "nodeId"
                 value: nodeId
 
+    #Issue: https://github.com/project-chip/connectedhomeip/issues/29786
     - label: "Step 2: TH reads from the DUT the ClusterRevision attribute."
       command: "readAttribute"
       attribute: "ClusterRevision"
diff --git a/src/app/tests/suites/certification/Test_TC_PSCFG_1_1.yaml b/src/app/tests/suites/certification/Test_TC_PSCFG_1_1.yaml
index ed8d6dd..d3ec743 100644
--- a/src/app/tests/suites/certification/Test_TC_PSCFG_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_PSCFG_1_1.yaml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-name: 63.1.1. [TC-PSCFG-1.1] Global attributes with server as DUT
+name: 63.1.1. [TC-PSCFG-1.1] Global Attributes with DUT as Server
 
 PICS:
     - PSCFG.S
@@ -23,7 +23,9 @@
     endpoint: 0
 
 tests:
-    - label: "Step 1: Commission DUT to TH"
+    - label:
+          "Step 1: Commission DUT to TH (can be skipped if done in a preceding
+          test)."
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -31,7 +33,7 @@
               - name: "nodeId"
                 value: nodeId
 
-    - label: "Step 2: TH reads the ClusterRevision attribute from the DUT"
+    - label: "Step 2: TH reads from the DUT the ClusterRevision attribute."
       command: "readAttribute"
       attribute: "ClusterRevision"
       response:
@@ -39,7 +41,7 @@
           constraints:
               type: int16u
 
-    - label: "Step 3: TH reads the FeatureMap attribute from the DUT"
+    - label: "Step 3: TH reads from the DUT the FeatureMap attribute."
       command: "readAttribute"
       attribute: "FeatureMap"
       response:
@@ -47,7 +49,7 @@
           constraints:
               type: bitmap32
 
-    - label: "Step 4: TH reads the AttributeList attribute from the DUT"
+    - label: "Step 4: TH reads from the DUT the AttributeList attribute."
       PICS: PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "AttributeList"
@@ -56,7 +58,7 @@
               type: list
               contains: [0, 65528, 65529, 65530, 65531, 65532, 65533]
 
-    - label: "Step 4: TH reads the AttributeList attribute from the DUT"
+    - label: "Step 4: TH reads from the DUT the AttributeList attribute."
       PICS: "!PICS_EVENT_LIST_ENABLED"
       command: "readAttribute"
       attribute: "AttributeList"
@@ -65,7 +67,16 @@
               type: list
               contains: [0, 65528, 65529, 65531, 65532, 65533]
 
-    - label: "Step 5: TH reads the AcceptedCommandList attribute from the DUT"
+    - label: "Step 5: TH reads from the DUT the EventList attribute."
+      PICS: PICS_EVENT_LIST_ENABLED
+      command: "readAttribute"
+      attribute: "EventList"
+      response:
+          value: []
+          constraints:
+              type: list
+
+    - label: "Step 6: TH reads from the DUT the AcceptedCommandList attribute."
       command: "readAttribute"
       attribute: "AcceptedCommandList"
       response:
@@ -73,19 +84,10 @@
           constraints:
               type: list
 
-    - label: "Step 6: TH reads the GeneratedCommandList attribute from the DUT"
+    - label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute."
       command: "readAttribute"
       attribute: "GeneratedCommandList"
       response:
           value: []
           constraints:
               type: list
-
-    - label: "Step 7: Read EventList attribute from the DUT."
-      PICS: PICS_EVENT_LIST_ENABLED
-      command: "readAttribute"
-      attribute: "EventList"
-      response:
-          value: []
-          constraints:
-              type: list
diff --git a/src/app/tests/suites/certification/Test_TC_PS_1_1.yaml b/src/app/tests/suites/certification/Test_TC_PS_1_1.yaml
index dca6317..f0ac686 100644
--- a/src/app/tests/suites/certification/Test_TC_PS_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_PS_1_1.yaml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-name: 62.1.1. [TC-PS-1.1] Global attributes with server as DUT
+name: 62.1.1. [TC-PS-1.1] Global Attributes with DUT as Server
 
 PICS:
     - PS.S
@@ -23,7 +23,9 @@
     endpoint: 1
 
 tests:
-    - label: "Step 1: Wait for the commissioned device to be retrieved"
+    - label:
+          "Step 1: Commission DUT to TH (can be skipped if done in a preceding
+          test)."
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -31,7 +33,7 @@
               - name: "nodeId"
                 value: nodeId
 
-    - label: "Step 2: Read the global attribute: ClusterRevision"
+    - label: "Step 2: Test Harness Client reads ClusterRevision attribute."
       command: "readAttribute"
       attribute: "ClusterRevision"
       response:
@@ -39,7 +41,7 @@
           constraints:
               type: int16u
 
-    - label: "Step 3a: Read the global attribute: FeatureMap"
+    - label: "Step 3a: TH reads from the DUT the FeatureMap attribute."
       PICS: " !PS.S.F00 && !PS.S.F01 && !PS.S.F02 && !PS.S.F03 "
       command: "readAttribute"
       attribute: "FeatureMap"
@@ -92,7 +94,7 @@
               type: bitmap32
               hasMasksSet: [0x2, 0x8]
 
-    - label: "Step 4: Read the global attribute: AttributeList"
+    - label: "Step 4: Test Harness Client reads AttributeList attribute."
       PICS: PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "AttributeList"
@@ -102,7 +104,7 @@
               contains:
                   [0, 1, 2, 0x1f, 65528, 65529, 65530, 65531, 65532, 65533]
 
-    - label: "Step 4: Read the global attribute: AttributeList"
+    - label: "Step 4: Test Harness Client reads AttributeList attribute."
       PICS: "!PICS_EVENT_LIST_ENABLED"
       command: "readAttribute"
       attribute: "AttributeList"
@@ -112,7 +114,7 @@
               contains: [0, 1, 2, 0x1f, 65528, 65529, 65531, 65532, 65533]
 
     - label:
-          "Step 4a: Read the Feature dependent(PS.S.F00-WIRED) attribute in
+          "Step 4a: TH reads the Feature dependent(PS.S.F00-WIRED) attribute in
           AttributeList"
       PICS: PS.S.F00
       command: "readAttribute"
@@ -123,7 +125,7 @@
               contains: [5]
 
     - label:
-          "Step 4b: Read the Feature dependent(PS.S.F01-BAT) attribute in
+          "Step 4b: TH reads the Feature dependent(PS.S.F01-BAT) attribute in
           AttributeList"
       PICS: PS.S.F01
       command: "readAttribute"
@@ -134,7 +136,7 @@
               contains: [14, 15, 16]
 
     - label:
-          "Step 4c: Read the Feature dependent(PS.S.F02-RECHG) attribute in
+          "Step 4c: TH reads the Feature dependent(PS.S.F02-RECHG) attribute in
           AttributeList"
       PICS: PS.S.F02
       command: "readAttribute"
@@ -145,7 +147,7 @@
               contains: [26, 28]
 
     - label:
-          "Step 4d: Read the Feature dependent(PS.S.F03-REPLC) attribute in
+          "Step 4d: TH reads the Feature dependent(PS.S.F03-REPLC) attribute in
           AttributeList"
       PICS: PS.S.F03
       command: "readAttribute"
@@ -155,23 +157,7 @@
               type: list
               contains: [19, 25]
 
-    - label: "Step 5: Read the global attribute: AcceptedCommandList"
-      command: "readAttribute"
-      attribute: "AcceptedCommandList"
-      response:
-          value: []
-          constraints:
-              type: list
-
-    - label: "Step 6: Read the global attribute: GeneratedCommandList"
-      command: "readAttribute"
-      attribute: "GeneratedCommandList"
-      response:
-          value: []
-          constraints:
-              type: list
-
-    - label: "Step 7a: Read the global attribute: EventList"
+    - label: "Step 5a: Test Harness Client reads EventList attribute."
       PICS: "PICS_EVENT_LIST_ENABLED &&  !PS.S.E00 && !PS.S.E01 && !PS.S.E02 "
       command: "readAttribute"
       attribute: "EventList"
@@ -180,7 +166,7 @@
           constraints:
               type: list
 
-    - label: "Step 7b: Read PS.S.E00(WiredFaultChange) event in EventList"
+    - label: "Step 5b: TH reads PS.S.E00(WiredFaultChange) event in EventList"
       PICS: PICS_EVENT_LIST_ENABLED && PS.S.E00
       command: "readAttribute"
       attribute: "EventList"
@@ -189,7 +175,7 @@
               type: list
               contains: [0]
 
-    - label: "Step 7c: Read PS.S.E01(BatFaultChange) event in EventList"
+    - label: "Step 5c: TH reads PS.S.E01(BatFaultChange) event in EventList"
       PICS: PICS_EVENT_LIST_ENABLED && PS.S.E01
       command: "readAttribute"
       attribute: "EventList"
@@ -198,7 +184,8 @@
               type: list
               contains: [1]
 
-    - label: "Step 7d: Read PS.S.E02(BatChargeFaultChange) event in EventList"
+    - label:
+          "Step 5d: TH reads PS.S.E02(BatChargeFaultChange) event in EventList"
       PICS: PICS_EVENT_LIST_ENABLED && PS.S.E02
       command: "readAttribute"
       attribute: "EventList"
@@ -206,3 +193,19 @@
           constraints:
               type: list
               contains: [2]
+
+    - label: "Step 6: Test Harness Client reads AcceptedCommandList attribute."
+      command: "readAttribute"
+      attribute: "AcceptedCommandList"
+      response:
+          value: []
+          constraints:
+              type: list
+
+    - label: "Step 7: Test Harness Client reads GeneratedCommandList attribute."
+      command: "readAttribute"
+      attribute: "GeneratedCommandList"
+      response:
+          value: []
+          constraints:
+              type: list
diff --git a/src/app/tests/suites/certification/Test_TC_PS_2_2.yaml b/src/app/tests/suites/certification/Test_TC_PS_2_2.yaml
index 06681fa..2f44951 100644
--- a/src/app/tests/suites/certification/Test_TC_PS_2_2.yaml
+++ b/src/app/tests/suites/certification/Test_TC_PS_2_2.yaml
@@ -51,7 +51,7 @@
       disabled: true
 
     - label: "Step 3a: Set up subscription to WiredFaultChange event"
-      PICS: PS.S.E00 && PS.M.ManualWiredFault
+      PICS: PS.S.E00 && PS.S.M.ManualWiredFault
       verification: |
           Please use Interactive mode to Verify subscription test step
           Here the command to enter interactive mode:--   ./chip-tool interactive start
@@ -93,12 +93,13 @@
       disabled: true
 
     - label: "Step 3b: Bring the DUT into a wired fault state."
+      PICS: PS.S.E00 && PS.S.M.ManualWiredFault
       verification: |
           DUT ACTION REQUIRED
       disabled: true
 
     - label: "Step 4: TH reads the ActiveWiredFaults attribute from the DUT"
-      PICS: PS.S.A000a && PS.M.ManualWiredFault
+      PICS: PS.S.A000a && PS.S.M.ManualWiredFault
       verification: |
           Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
 
@@ -109,8 +110,16 @@
           General error: 0x86 (UNSUPPORTED_ATTRIBUTE)
       disabled: true
 
+    - label:
+          "Step 5: The Current field of Step 3b has to be the same as the value
+          of Step 4."
+      PICS: PS.S.E00 && PS.S.A000a && PS.S.M.ManualWiredFault
+      verification: |
+
+      disabled: true
+
     - label: "Step 6: Bring the DUT back into a clean state."
-      PICS: PS.S.E00 && PS.M.ManualWiredFault
+      PICS: PS.S.E00 && PS.S.M.ManualWiredFault
       verification: |
           DUT ACTION REQUIRED
       disabled: true
@@ -133,7 +142,7 @@
       disabled: true
 
     - label: "Step 8a: Set up subscription to BatFaultChange event"
-      PICS: PS.S.E01 && PS.M.ManualBatFault
+      PICS: PS.S.E01 && PS.S.M.ManualBatFault
       verification: |
           Please use Interactive mode to Verify subscription test step
           Here the command to enter interactive mode:--   ./chip-tool interactive start
@@ -174,12 +183,13 @@
       disabled: true
 
     - label: "Step 8b: Bring the DUT into a battery fault state."
+      PICS: PS.S.E01 && PS.S.M.ManualBatFault
       verification: |
           DUT ACTION REQUIRED
       disabled: true
 
     - label: "Step 9: TH reads the ActiveBatFaults attribute from the DUT"
-      PICS: PS.S.A0012 && PS.M.ManualBatFault
+      PICS: PS.S.A0012 && PS.S.M.ManualBatFault
       verification: |
           Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
 
@@ -190,7 +200,7 @@
       disabled: true
 
     - label: "Step 11: Bring the DUT back into a clean state."
-      PICS: PS.S.E01 && PS.M.ManualBatFault
+      PICS: PS.S.E01 && PS.S.M.ManualBatFault
       verification: |
           DUT ACTION REQUIRED
       disabled: true
@@ -203,6 +213,7 @@
 
     - label:
           "Step 12b: TH reads the ActiveBatChargeFaults attribute from the DUT"
+      PICS: PS.S.A001e
       verification: |
           Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
 
@@ -213,7 +224,7 @@
       disabled: true
 
     - label: "Step 13a: Set up subscription to BatChargeFaultChange event"
-      PICS: PS.S.E02 && PS.M.ManualBatChargeFault
+      PICS: PS.S.E02 && PS.S.M.ManualBatChargeFault
       verification: |
           ./chip-tool interactive start
 
@@ -253,6 +264,7 @@
       disabled: true
 
     - label: "Step 13b: Bring the DUT into a charge fault state."
+      PICS: PS.S.E02 && PS.S.M.ManualBatChargeFault
       verification: |
           DUT ACTION REQUIRED
       disabled: true
@@ -269,8 +281,16 @@
           General error: 0x86 (UNSUPPORTED_ATTRIBUTE)
       disabled: true
 
+    - label:
+          "Step 5: The Current field of Step 13b has to be the same as the value
+          of Step 14."
+      PICS: PS.S.E02 && PS.S.A001e && PS.S.M.ManualWiredFault
+      verification: |
+
+      disabled: true
+
     - label: "Step 16: Bring the DUT back into a clean state."
-      PICS: PS.S.E02 && PS.M.ManualBatChargeFault
+      PICS: PS.S.E02 && PS.S.M.ManualBatChargeFault
       verification: |
           DUT ACTION REQUIRED
       disabled: true
diff --git a/src/app/tests/suites/certification/Test_TC_RVCCLEANM_3_1.yaml b/src/app/tests/suites/certification/Test_TC_RVCCLEANM_3_1.yaml
index 83634fa..9aba7fc 100644
--- a/src/app/tests/suites/certification/Test_TC_RVCCLEANM_3_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_RVCCLEANM_3_1.yaml
@@ -16,6 +16,9 @@
 
 PICS:
     - RVCCLEANM.S
+    - RVCCLEANM.S.F00
+    - OO.S.C00.Rsp
+    - OO.S.C01.Rsp
 
 config:
     nodeId: 0x12344321
diff --git a/src/app/tests/suites/certification/Test_TC_RVCCLEANM_3_3.yaml b/src/app/tests/suites/certification/Test_TC_RVCCLEANM_3_3.yaml
index 7fa5f67..bb212c3 100644
--- a/src/app/tests/suites/certification/Test_TC_RVCCLEANM_3_3.yaml
+++ b/src/app/tests/suites/certification/Test_TC_RVCCLEANM_3_3.yaml
@@ -21,6 +21,7 @@
     - RVCCLEANM.S.A0002
     - RVCCLEANM.S.A0003
     - RVCCLEANM.S.F00
+    - OO.S.A4003
 
 config:
     nodeId: 0x12344321
diff --git a/src/app/tests/suites/certification/Test_TC_RVCRUNM_3_3.yaml b/src/app/tests/suites/certification/Test_TC_RVCRUNM_3_3.yaml
index 76b1bec..2d609c8 100644
--- a/src/app/tests/suites/certification/Test_TC_RVCRUNM_3_3.yaml
+++ b/src/app/tests/suites/certification/Test_TC_RVCRUNM_3_3.yaml
@@ -18,7 +18,10 @@
     Server
 
 PICS:
-    - RVCRUNM.S
+    - RVCRUNM.S.A0002
+    - RVCRUNM.S.A0003
+    - RVCRUNM.S.F00
+    - OO.S.A4003
 
 config:
     nodeId: 0x12344321
diff --git a/src/app/tests/suites/certification/Test_TC_TCCM_2_1.yaml b/src/app/tests/suites/certification/Test_TC_TCCM_2_1.yaml
index 02c0246..3f28380 100644
--- a/src/app/tests/suites/certification/Test_TC_TCCM_2_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_TCCM_2_1.yaml
@@ -100,7 +100,7 @@
     - label:
           "Step 5: Manually put the device in a state from which it will FAIL to
           transition to PIXIT.TCCM.MODE_CHANGE_FAIL"
-      PICS: TCCM.S.M.CAN_MANUALLY_CONTROLLED && TCCM.S.M.CAN_TEST_MODE_FAILURE
+      PICS: TCCM.S.M.CAN_TEST_MODE_FAILURE && TCCM.S.M.CAN_MANUALLY_CONTROLLED
       verification: |
           Manual operation required
       disabled: true
diff --git a/src/app/tests/suites/certification/Test_TC_TCCM_3_1.yaml b/src/app/tests/suites/certification/Test_TC_TCCM_3_1.yaml
index 779fbd1..d491fe6 100644
--- a/src/app/tests/suites/certification/Test_TC_TCCM_3_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_TCCM_3_1.yaml
@@ -17,6 +17,8 @@
 PICS:
     - TCCM.S.A0003
     - TCCM.S.F00
+    - OO.S.C00.Rsp
+    - OO.S.C01.Rsp
 
 config:
     nodeId: 0x12344321
@@ -31,7 +33,9 @@
         defaultValue: 0
 
 tests:
-    - label: "Step 1: Wait for the commissioned device to be retrieved"
+    - label:
+          "Step 1: Commission DUT to TH (can be skipped if done in a preceding
+          test)."
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -48,14 +52,14 @@
       arguments:
           value: nonNull_OnMode_value
 
-    - label: "Step 2: TH reads the OnMode attribute from the DUT"
+    - label: "Step 2: TH reads from the DUT the OnMode attribute."
       PICS: TCCM.S.A0003 && TCCM.S.F00
       command: "readAttribute"
       attribute: "OnMode"
       response:
           saveAs: on_mode_dut
 
-    - label: "Step 3a: TH reads the CurrentMode attribute from the DUT"
+    - label: "Step 3a: TH reads from the DUT the CurrentMode attribute."
       PICS: TCCM.S.A0001 && TCCM.S.F00
       command: "readAttribute"
       attribute: "CurrentMode"
diff --git a/src/app/tests/suites/certification/Test_TC_TSTAT_1_1.yaml b/src/app/tests/suites/certification/Test_TC_TSTAT_1_1.yaml
index 2081e13..b2bf2a1 100644
--- a/src/app/tests/suites/certification/Test_TC_TSTAT_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_TSTAT_1_1.yaml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-name: 42.1.1. [TC-TSTAT-1.1] Global attributes with server as DUT
+name: 42.1.1. [TC-TSTAT-1.1] Global Attributes with DUT as Server
 
 PICS:
     - TSTAT.S
@@ -23,7 +23,9 @@
     endpoint: 1
 
 tests:
-    - label: "Step 1: Wait for the commissioned device to be retrieved"
+    - label:
+          "Step 1: Commission DUT to TH (can be skipped if done in a preceding
+          test)."
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -31,7 +33,7 @@
               - name: "nodeId"
                 value: nodeId
 
-    - label: "Step 2: Read the global attribute: ClusterRevision"
+    - label: "Step 2: TH reads from the DUT the ClusterRevision attribute."
       command: "readAttribute"
       attribute: "ClusterRevision"
       response:
@@ -39,7 +41,7 @@
           constraints:
               type: int16u
 
-    - label: "Step 3a: Read the global attribute: FeatureMap"
+    - label: "Step 3a: TH reads from the DUT the FeatureMap attribute."
       PICS:
           "!TSTAT.S.F00 && !TSTAT.S.F01 && !TSTAT.S.F02 && !TSTAT.S.F03 &&
           !TSTAT.S.F04 && !TSTAT.S.F05"
@@ -127,7 +129,7 @@
               type: bitmap32
               hasMasksSet: [0x40]
 
-    - label: "Step 4a: Read the global attribute: AttributeList"
+    - label: "Step 4a: TH reads from the DUT the AttributeList attribute."
       PICS: PICS_EVENT_LIST_ENABLED
       command: "readAttribute"
       attribute: "AttributeList"
@@ -136,7 +138,7 @@
               type: list
               contains: [0, 27, 28, 65528, 65529, 65530, 65531, 65532, 65533]
 
-    - label: "Step 4a: Read the global attribute: AttributeList"
+    - label: "Step 4a: TH reads from the DUT the AttributeList attribute."
       PICS: "!PICS_EVENT_LIST_ENABLED"
       command: "readAttribute"
       attribute: "AttributeList"
@@ -146,8 +148,8 @@
               contains: [0, 27, 28, 65528, 65529, 65531, 65532, 65533]
 
     - label:
-          "Step 4b: Read the Feature dependent(TSTAT.S.F00(HEAT)) attribute in
-          AttributeList"
+          "Step 4b: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) attribute
+          in AttributeList"
       PICS: TSTAT.S.F00
       command: "readAttribute"
       attribute: "AttributeList"
@@ -156,8 +158,8 @@
               type: list
               contains: [18]
     - label:
-          "Step 4c: Read the Feature dependent(TSTAT.S.F01(COOL)) attribute in
-          AttributeList"
+          "Step 4c: TH reads the Feature dependent(TSTAT.S.F01(COOL)) attribute
+          in AttributeList"
       PICS: TSTAT.S.F01
       command: "readAttribute"
       attribute: "AttributeList"
@@ -167,8 +169,8 @@
               contains: [17]
 
     - label:
-          "Step 4d: Read the Feature dependent(TSTAT.S.F02(OCC)) attribute in
-          AttributeList"
+          "Step 4d: TH reads the Feature dependent(TSTAT.S.F02(OCC)) attribute
+          in AttributeList"
       PICS: TSTAT.S.F02
       command: "readAttribute"
       attribute: "AttributeList"
@@ -178,7 +180,7 @@
               contains: [2]
 
     - label:
-          "Step 4e: Read the Feature dependent(TSTAT.S.F00(HEAT) &
+          "Step 4e: TH reads the Feature dependent(TSTAT.S.F00(HEAT) &
           TSTAT.S.F02(OCC)) attribute in AttributeList"
       PICS: TSTAT.S.F00 && TSTAT.S.F02
       command: "readAttribute"
@@ -189,7 +191,7 @@
               contains: [20]
 
     - label:
-          "Step 4f: Read the Feature dependent(TSTAT.S.F01(COOL) &
+          "Step 4f: TH reads the Feature dependent(TSTAT.S.F01(COOL) &
           TSTAT.S.F02(OCC)) attribute in AttributeList"
       PICS: TSTAT.S.F01 && TSTAT.S.F02
       command: "readAttribute"
@@ -200,8 +202,8 @@
               contains: [19]
 
     - label:
-          "Step 4g: Read the Feature dependent(TSTAT.S.F05(AUTO)) attribute in
-          AttributeList"
+          "Step 4g: TH reads the Feature dependent(TSTAT.S.F05(AUTO)) attribute
+          in AttributeList"
       PICS: TSTAT.S.F05
       command: "readAttribute"
       attribute: "AttributeList"
@@ -211,8 +213,8 @@
               contains: [17, 18, 25]
 
     - label:
-          "Step 4h: Read the Feature dependent(TSTAT.S.F03(SCH)) attribute in
-          AttributeList"
+          "Step 4h: TH reads the Feature dependent(TSTAT.S.F03(SCH)) attribute
+          in AttributeList"
       PICS: TSTAT.S.F03
       command: "readAttribute"
       attribute: "AttributeList"
@@ -222,7 +224,7 @@
               contains: [32, 33, 34]
 
     - label:
-          "Step 4i: Read the Feature dependent(TSTAT.S.F04(SB)) attribute in
+          "Step 4i: TH reads the Feature dependent(TSTAT.S.F04(SB)) attribute in
           AttributeList"
       PICS: TSTAT.S.F04
       command: "readAttribute"
@@ -233,7 +235,7 @@
               contains: [52, 53, 54]
 
     - label:
-          "Step 4j: Read the Feature dependent(TSTAT.S.F04(SB) &
+          "Step 4j: TH reads the Feature dependent(TSTAT.S.F04(SB) &
           TSTAT.S.F02(OCC)) attribute in AttributeList"
       PICS: TSTAT.S.F04 && TSTAT.S.F02
       command: "readAttribute"
@@ -243,7 +245,7 @@
               type: list
               contains: [55, 56, 57]
 
-    - label: "Step 4k: Read the optional attribute in AttributeList"
+    - label: "Step 4k: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0001
       command: "readAttribute"
       attribute: "AttributeList"
@@ -252,7 +254,7 @@
               type: list
               contains: [1]
 
-    - label: "Step 4l: Read the optional attribute in AttributeList"
+    - label: "Step 4l: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0009
       command: "readAttribute"
       attribute: "AttributeList"
@@ -261,7 +263,7 @@
               type: list
               contains: [9]
 
-    - label: "Step 4m: Read the optional attribute in AttributeList"
+    - label: "Step 4m: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0010
       command: "readAttribute"
       attribute: "AttributeList"
@@ -270,7 +272,7 @@
               type: list
               contains: [16]
 
-    - label: "Step 4n: Read the optional attribute in AttributeList"
+    - label: "Step 4n: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A001a
       command: "readAttribute"
       attribute: "AttributeList"
@@ -279,7 +281,7 @@
               type: list
               contains: [26]
 
-    - label: "Step 4o: Read the optional attribute in AttributeList"
+    - label: "Step 4o: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A001d
       command: "readAttribute"
       attribute: "AttributeList"
@@ -288,7 +290,7 @@
               type: list
               contains: [29]
 
-    - label: "Step 4p: Read the optional attribute in AttributeList"
+    - label: "Step 4p: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0023
       command: "readAttribute"
       attribute: "AttributeList"
@@ -297,7 +299,7 @@
               type: list
               contains: [35]
 
-    - label: "Step 4q: Read the optional attribute in AttributeList"
+    - label: "Step 4q: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0024
       command: "readAttribute"
       attribute: "AttributeList"
@@ -306,7 +308,7 @@
               type: list
               contains: [36]
 
-    - label: "Step 4r: Read the optional attribute in AttributeList"
+    - label: "Step 4r: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0025
       command: "readAttribute"
       attribute: "AttributeList"
@@ -315,7 +317,7 @@
               type: list
               contains: [37]
 
-    - label: "Step 4s: Read the optional attribute in AttributeList"
+    - label: "Step 4s: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0029
       command: "readAttribute"
       attribute: "AttributeList"
@@ -324,7 +326,7 @@
               type: list
               contains: [41]
 
-    - label: "Step 4t: Read the optional attribute in AttributeList"
+    - label: "Step 4t: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0030
       command: "readAttribute"
       attribute: "AttributeList"
@@ -333,7 +335,7 @@
               type: list
               contains: [48]
 
-    - label: "Step 4u: Read the optional attribute in AttributeList"
+    - label: "Step 4u: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0031
       command: "readAttribute"
       attribute: "AttributeList"
@@ -342,7 +344,7 @@
               type: list
               contains: [49]
 
-    - label: "Step 4x: Read the optional attribute in AttributeList"
+    - label: "Step 4x: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0032
       command: "readAttribute"
       attribute: "AttributeList"
@@ -351,7 +353,7 @@
               type: list
               contains: [50]
 
-    - label: "Step 5y: Read the optional attribute: AttributeList"
+    - label: "Step 4y: TH reads the optional attribute: AttributeList"
       PICS: TSTAT.S.A003a
       command: "readAttribute"
       attribute: "AttributeList"
@@ -360,7 +362,7 @@
               type: list
               contains: [58]
 
-    - label: "Step 4z: Read the optional attribute in AttributeList"
+    - label: "Step 4z: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0040
       command: "readAttribute"
       attribute: "AttributeList"
@@ -369,7 +371,7 @@
               type: list
               contains: [64]
 
-    - label: "Step 4A: Read the optional attribute in AttributeList"
+    - label: "Step 4A: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0041
       command: "readAttribute"
       attribute: "AttributeList"
@@ -378,7 +380,7 @@
               type: list
               contains: [65]
 
-    - label: "Step 4B: Read the optional attribute in AttributeList"
+    - label: "Step 4B: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0042
       command: "readAttribute"
       attribute: "AttributeList"
@@ -387,7 +389,7 @@
               type: list
               contains: [66]
 
-    - label: "Step 4C: Read the optional attribute in AttributeList"
+    - label: "Step 4C: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0043
       command: "readAttribute"
       attribute: "AttributeList"
@@ -396,7 +398,7 @@
               type: list
               contains: [67]
 
-    - label: "Step 5D: Read the optional attribute: AttributeList"
+    - label: "Step 4D: TH reads the optional attribute: AttributeList"
       PICS: TSTAT.S.A0044
       command: "readAttribute"
       attribute: "AttributeList"
@@ -405,7 +407,7 @@
               type: list
               contains: [68]
 
-    - label: "Step 4E: Read the optional attribute in AttributeList"
+    - label: "Step 4E: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0045
       command: "readAttribute"
       attribute: "AttributeList"
@@ -414,7 +416,7 @@
               type: list
               contains: [69]
 
-    - label: "Step 4F: Read the optional attribute in AttributeList"
+    - label: "Step 4F: TH reads the optional attribute in AttributeList"
       PICS: TSTAT.S.A0046
       command: "readAttribute"
       attribute: "AttributeList"
@@ -423,7 +425,7 @@
               type: list
               contains: [70]
 
-    - label: "Step 5G: Read the optional attribute: AttributeList"
+    - label: "Step 4g: TH reads the optional attribute: AttributeList"
       PICS: TSTAT.S.A0047
       command: "readAttribute"
       attribute: "AttributeList"
@@ -433,7 +435,7 @@
               contains: [71]
 
     - label:
-          "Step 4H: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional
+          "Step 4H: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional
           attribute in AttributeList"
       PICS: TSTAT.S.F00 && TSTAT.S.A0003
       command: "readAttribute"
@@ -444,7 +446,7 @@
               contains: [3]
 
     - label:
-          "Step 4I: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional
+          "Step 4I: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional
           attribute in AttributeList"
       PICS: TSTAT.S.F00 && TSTAT.S.A0004
       command: "readAttribute"
@@ -455,7 +457,7 @@
               contains: [4]
 
     - label:
-          "Step 4J: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional
+          "Step 4J: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional
           attribute in AttributeList"
       PICS: TSTAT.S.F00 && TSTAT.S.A0008
       command: "readAttribute"
@@ -466,7 +468,7 @@
               contains: [8]
 
     - label:
-          "Step 4K: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional
+          "Step 4K: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional
           attribute in AttributeList"
       PICS: TSTAT.S.F00 && TSTAT.S.A0015
       command: "readAttribute"
@@ -477,7 +479,7 @@
               contains: [21]
 
     - label:
-          "Step 4L: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional
+          "Step 4L: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional
           attribute in AttributeList"
       PICS: TSTAT.S.F00 && TSTAT.S.A0016
       command: "readAttribute"
@@ -488,7 +490,7 @@
               contains: [22]
 
     - label:
-          "Step 4M: Read the Feature dependent(TSTAT.S.F01(COOL)) optional
+          "Step 4M: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional
           attribute in AttributeList"
       PICS: TSTAT.S.F01 && TSTAT.S.A0005
       command: "readAttribute"
@@ -499,7 +501,7 @@
               contains: [5]
 
     - label:
-          "Step 4N: Read the Feature dependent(TSTAT.S.F01(COOL)) optional
+          "Step 4N: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional
           attribute in AttributeList"
       PICS: TSTAT.S.F01 && TSTAT.S.A0007
       command: "readAttribute"
@@ -510,7 +512,7 @@
               contains: [6]
 
     - label:
-          "Step 4O: Read the Feature dependent(TSTAT.S.F01(COOL)) optional
+          "Step 4O: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional
           attribute in AttributeList"
       PICS: TSTAT.S.F01 && TSTAT.S.A0007
       command: "readAttribute"
@@ -521,7 +523,7 @@
               contains: [7]
 
     - label:
-          "Step 4P: Read the Feature dependent(TSTAT.S.F01(COOL)) optional
+          "Step 4P: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional
           attribute in AttributeList"
       PICS: TSTAT.S.F01 && TSTAT.S.A0017
       command: "readAttribute"
@@ -532,7 +534,7 @@
               contains: [23]
 
     - label:
-          "Step 4Q: Read the Feature dependent(TSTAT.S.F01(COOL)) optional
+          "Step 4Q: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional
           attribute in AttributeList"
       PICS: TSTAT.S.F01 && TSTAT.S.A0018
       command: "readAttribute"
@@ -543,7 +545,7 @@
               contains: [24]
 
     - label:
-          "Step 4R: Read the Feature dependent(TSTAT.S.F05(AUTO)) optional
+          "Step 4R: TH reads the Feature dependent(TSTAT.S.F05(AUTO)) optional
           attribute in AttributeList"
       PICS: TSTAT.S.F05 && TSTAT.S.A001e
       command: "readAttribute"
@@ -553,7 +555,16 @@
               type: list
               contains: [30]
 
-    - label: "Step 5a: Read the mandatory commands in AcceptedCommandList"
+    - label: "Step 5: TH reads EventList attribute from the DUT."
+      PICS: PICS_EVENT_LIST_ENABLED
+      command: "readAttribute"
+      attribute: "EventList"
+      response:
+          value: []
+          constraints:
+              type: list
+
+    - label: "Step 6a: TH reads from the DUT the AcceptedCommandList attribute."
       command: "readAttribute"
       attribute: "AcceptedCommandList"
       response:
@@ -562,7 +573,7 @@
               contains: [0]
 
     - label:
-          "Step 5b: Read Feature dependent(TSTAT.S.F03(SCH)) commands in
+          "Step 6b: TH reads Feature dependent(TSTAT.S.F03(SCH)) commands in
           AcceptedCommandList"
       PICS: TSTAT.S.F03
       command: "readAttribute"
@@ -573,7 +584,7 @@
               contains: [1, 2, 3]
 
     - label:
-          "Step 5c: Read the optional (GetRelayStatusLog) command in
+          "Step 6c: TH reads the optional (GetRelayStatusLog) command in
           AcceptedCommandList"
       PICS: TSTAT.S.C04.Rsp
       command: "readAttribute"
@@ -583,7 +594,8 @@
               type: list
               contains: [4]
 
-    - label: "Step 6a: Read the global attribute: GeneratedCommandList"
+    - label:
+          "Step 7a: TH reads from the DUT the GeneratedCommandList attribute."
       PICS: " !TSTAT.S.C04.Rsp && !TSTAT.S.C02.Rsp "
       command: "readAttribute"
       attribute: "GeneratedCommandList"
@@ -593,7 +605,7 @@
               type: list
 
     - label:
-          "Step 6b: Read Feature dependent(TSTAT.S.F03(SCH)) commands in
+          "Step 7b: TH reads Feature dependent(TSTAT.S.F03(SCH)) commands in
           GeneratedCommandList"
       PICS: TSTAT.S.F03
       command: "readAttribute"
@@ -604,7 +616,7 @@
               contains: [0]
 
     - label:
-          "Step 6c: Read optional command (GetRelayStatusLogResponse) in
+          "Step 7c: TH reads optional command (GetRelayStatusLogResponse) in
           GeneratedCommandList"
       PICS: TSTAT.S.C04.Rsp
       command: "readAttribute"
@@ -613,12 +625,3 @@
           constraints:
               type: list
               contains: [1]
-
-    - label: "Step 7: Read EventList attribute from the DUT."
-      PICS: PICS_EVENT_LIST_ENABLED
-      command: "readAttribute"
-      attribute: "EventList"
-      response:
-          value: []
-          constraints:
-              type: list
diff --git a/src/app/tests/suites/certification/Test_TC_TSTAT_2_1.yaml b/src/app/tests/suites/certification/Test_TC_TSTAT_2_1.yaml
index 36b535a..63aba52 100644
--- a/src/app/tests/suites/certification/Test_TC_TSTAT_2_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_TSTAT_2_1.yaml
@@ -23,7 +23,7 @@
     endpoint: 1
 
 tests:
-    - label: "Step 1: Wait for the commissioned device to be retrieved"
+    - label: "Step 1: Commission DUT to TH"
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -119,7 +119,7 @@
       response:
           saveAs: UnoccupiedCoolingSetpointValue
 
-    - label: "Step 2: Reads mandatory attributes from DUT: LocalTemperature"
+    - label: "Step 2: TH reads the LocalTemperature attribute from the DUT"
       command: "readAttribute"
       attribute: "LocalTemperature"
       response:
@@ -128,7 +128,7 @@
               minValue: -27315
               maxValue: 32767
 
-    - label: "Step 3: Read OutdoorTemperature attribute from the DUT"
+    - label: "Step 3: TH reads the OutdoorTemperature attribute from the DUT"
       PICS: TSTAT.S.A0001
       command: "readAttribute"
       attribute: "OutdoorTemperature"
@@ -138,7 +138,7 @@
               minValue: -27315
               maxValue: 32767
 
-    - label: "Step 4: Read Occupancy attribute from the DUT"
+    - label: "Step 4: TH reads the Occupancy attribute from the DUT"
       PICS: TSTAT.S.F02
       command: "readAttribute"
       attribute: "Occupancy"
@@ -149,7 +149,7 @@
               maxValue: 1
 
     - label:
-          "Step 5a: Read attribute AbsMinHeatSetpointLimit if TSTAT.S.F05
+          "Step 5a: TH reads attribute AbsMinHeatSetpointLimit if TSTAT.S.F05
           feature is supported"
       PICS: TSTAT.S.A0003 && TSTAT.S.A0005 && TSTAT.S.F05
       command: "readAttribute"
@@ -160,7 +160,7 @@
               maxValue: AbsMinCoolSetpointLimitStep5 - MinSetpointDeadBandValue
 
     - label:
-          "Step 5b: Read attribute AbsMinHeatSetpointLimit if TSTAT.S.F05
+          "Step 5b: TH reads attribute AbsMinHeatSetpointLimit if TSTAT.S.F05
           feature is supported"
       PICS: TSTAT.S.A0003 && !TSTAT.S.A0005 && TSTAT.S.F05
       command: "readAttribute"
@@ -170,7 +170,7 @@
               type: int16s
               maxValue: 1575
 
-    - label: "Step 6a: Read attribute AbsMinHeatSetpointLimit from DUT"
+    - label: "Step 6a: TH reads attribute AbsMinHeatSetpointLimit from DUT"
       PICS: TSTAT.S.A0003 && !TSTAT.S.F05
       command: "readAttribute"
       attribute: "AbsMinHeatSetpointLimit"
@@ -181,7 +181,8 @@
               maxValue: 32767
 
     - label:
-          "Step 6b: Reads mandatory attributes from DUT: AbsMaxHeatSetpointLimit"
+          "Step 6b: TH reads mandatory attributes from DUT:
+          AbsMaxHeatSetpointLimit"
       PICS: TSTAT.S.A0004
       command: "readAttribute"
       attribute: "AbsMaxHeatSetpointLimit"
@@ -191,7 +192,8 @@
               minValue: -27315
               maxValue: 32767
 
-    - label: "Step 7: Read attribute AbsMinCoolSetpointLimit from DUT"
+    - label:
+          "Step 7: TH reads the AbsMinCoolSetpointLimit attribute from the DUT"
       PICS: TSTAT.S.A0005
       command: "readAttribute"
       attribute: "AbsMinCoolSetpointLimit"
@@ -201,7 +203,8 @@
               minValue: -27315
               maxValue: 32767
 
-    - label: "Step 8: Read attribute AbsMaxCoolSetpointLimit from DUT"
+    - label:
+          "Step 8: TH reads the AbsMaxCoolSetpointLimit attribute from the DUT"
       PICS: TSTAT.S.A0006
       command: "readAttribute"
       attribute: "AbsMaxCoolSetpointLimit"
@@ -211,7 +214,7 @@
               minValue: -27315
               maxValue: 32767
 
-    - label: "Step 9: Read PICoolingDemand attribute from the DUT"
+    - label: "Step 9: TH reads the PICoolingDemand attribute from the DUT"
       PICS: TSTAT.S.A0007
       command: "readAttribute"
       attribute: "PICoolingDemand"
@@ -221,7 +224,7 @@
               minValue: 0
               maxValue: 100
 
-    - label: "Step 10: Read PIHeatingDemand attribute from the DUT"
+    - label: "Step 10: TH reads the PIHeatingDemand attribute from the DUT"
       PICS: TSTAT.S.A0008
       command: "readAttribute"
       attribute: "PIHeatingDemand"
@@ -231,17 +234,9 @@
               minValue: 0
               maxValue: 100
 
-    - label: "Step 11: Read HVACSystemTypeConfiguration attribute from the DUT"
-      PICS: TSTAT.S.A0009
-      command: "readAttribute"
-      attribute: "HVACSystemTypeConfiguration"
-      response:
-          constraints:
-              type: bitmap8
-              minValue: 0
-              maxValue: 63
-
-    - label: "Step 12: Read LocalTemperatureCalibration attribute from the DUT"
+    - label:
+          "Step 12: TH reads the LocalTemperatureCalibration attribute from the
+          DUT"
       PICS: TSTAT.S.A0010
       command: "readAttribute"
       attribute: "LocalTemperatureCalibration"
@@ -251,7 +246,7 @@
               minValue: -25
               maxValue: 25
 
-    - label: "Step 13a: Read attribute OccupiedCoolingSetpoint from the DUT"
+    - label: "Step 13a: TH reads attribute OccupiedCoolingSetpoint from the DUT"
       PICS: TSTAT.S.F01 && TSTAT.S.A0017 && TSTAT.S.A0018
       command: "readAttribute"
       attribute: "OccupiedCoolingSetpoint"
@@ -261,7 +256,7 @@
               minValue: MinCoolSetpointLimitValue
               maxValue: MaxCoolSetpointLimitValue
 
-    - label: "Step 13b: Read attribute OccupiedCoolingSetpoint from the DUT"
+    - label: "Step 13b: TH reads attribute OccupiedCoolingSetpoint from the DUT"
       PICS: TSTAT.S.F01 && !TSTAT.S.A0017 && !TSTAT.S.A0018
       command: "readAttribute"
       attribute: "OccupiedCoolingSetpoint"
@@ -272,7 +267,7 @@
               maxValue: 3200
 
     - label:
-          "Step 14a: Read attribute OccupiedHeatingSetpoint if TSTAT.S.F05
+          "Step 14a: TH reads attribute OccupiedHeatingSetpoint if TSTAT.S.F05
           feature is supported"
       PICS: TSTAT.S.F05 && TSTAT.S.F00
       command: "readAttribute"
@@ -283,7 +278,7 @@
               minValue: AbsMinCoolSetpointLimitStep5
               maxValue: OccupiedCoolingSetpointValue - MinSetpointDeadBandValue
 
-    - label: "Step 14b: Read attribute OccupiedHeatingSetpoint from the DUT"
+    - label: "Step 14b: TH reads attribute OccupiedHeatingSetpoint from the DUT"
       PICS: TSTAT.S.F00 && !TSTAT.S.F05
       command: "readAttribute"
       attribute: "OccupiedHeatingSetpoint"
@@ -293,7 +288,8 @@
               minValue: 700
               maxValue: 3000
 
-    - label: "Step 15a: Read UnoccupiedCoolingSetpoint attribute from the DUT"
+    - label:
+          "Step 15a: TH reads UnoccupiedCoolingSetpoint attribute from the DUT"
       PICS: TSTAT.S.F05 && TSTAT.S.A0013
       command: "readAttribute"
       attribute: "UnoccupiedCoolingSetpoint"
@@ -303,7 +299,8 @@
               minValue: AbsMinHeatValue
               maxValue: AbsMaxHeatValue
 
-    - label: "Step 15b: Read UnoccupiedCoolingSetpoint attribute from the DUT"
+    - label:
+          "Step 15b: TH reads UnoccupiedCoolingSetpoint attribute from the DUT"
       PICS: TSTAT.S.F01 && TSTAT.S.F02 && !TSTAT.S.F05
       command: "readAttribute"
       attribute: "UnoccupiedCoolingSetpoint"
@@ -313,7 +310,8 @@
               minValue: 1600
               maxValue: 3200
 
-    - label: "Step 16a: Read UnoccupiedHeatingSetpoint attribute from the DUT"
+    - label:
+          "Step 16a: TH reads UnoccupiedHeatingSetpoint attribute from the DUT"
       PICS: TSTAT.S.F00 && TSTAT.S.F02 && TSTAT.S.F05 && TSTAT.S.A0013
       command: "readAttribute"
       attribute: "UnoccupiedHeatingSetpoint"
@@ -324,7 +322,8 @@
               maxValue:
                   UnoccupiedCoolingSetpointValue - MinSetpointDeadBandValue
 
-    - label: "Step 16b: Read UnoccupiedHeatingSetpoint attribute from the DUT"
+    - label:
+          "Step 16b: TH reads UnoccupiedHeatingSetpoint attribute from the DUT"
       PICS: TSTAT.S.F00 && TSTAT.S.F02 && !TSTAT.S.F05
       command: "readAttribute"
       attribute: "UnoccupiedHeatingSetpoint"
@@ -334,7 +333,7 @@
               minValue: 700
               maxValue: 3000
 
-    - label: "Step 17a: Reads attribute from DUT: MinHeatSetpointLimit"
+    - label: "Step 17a: TH reads attribute from DUT: MinHeatSetpointLimit"
       PICS: TSTAT.S.A0015 && TSTAT.S.F05 && TSTAT.S.A0017 && TSTAT.S.A0019
       command: "readAttribute"
       attribute: "MinHeatSetpointLimit"
@@ -345,7 +344,7 @@
               maxValue: MinCoolSetpointLimitValue - MinSetpointDeadBandValue
 
     - label:
-          "Step 17b: Reads MinHeatSetpointLimit attribute from Server DUT and
+          "Step 17b: TH reads MinHeatSetpointLimit attribute from Server DUT and
           verifies that the value is within range"
       command: "readAttribute"
       attribute: "MinHeatSetpointLimit"
@@ -358,7 +357,7 @@
 
     #Using hard coded values when optional attributes are not available
     - label:
-          "Step 17c: Reads MinHeatSetpointLimit attribute from Server DUT and
+          "Step 17c: TH reads MinHeatSetpointLimit attribute from Server DUT and
           verifies that the value is within range"
       command: "readAttribute"
       attribute: "MinHeatSetpointLimit"
@@ -369,7 +368,7 @@
               minValue: 700
               maxValue: 3000
 
-    - label: "Step 18a: Read attribute MaxHeatSetpointLimit from the DUT"
+    - label: "Step 18a: TH reads attribute MaxHeatSetpointLimit from the DUT"
       PICS: TSTAT.S.A0016 && !TSTAT.S.F05
       command: "readAttribute"
       attribute: "MaxHeatSetpointLimit"
@@ -379,7 +378,7 @@
               minValue: 700
               maxValue: 3000
 
-    - label: "Step 18b: Reads attribute from DUT: MaxHeatSetpointLimit"
+    - label: "Step 18b: TH reads attribute from DUT: MaxHeatSetpointLimit"
       PICS: TSTAT.S.A0016 && TSTAT.S.F05 && TSTAT.S.A0018
       command: "readAttribute"
       attribute: "MaxHeatSetpointLimit"
@@ -389,7 +388,7 @@
               minValue: 700
               maxValue: MaxCoolSetpointLimitValue - MinSetpointDeadBandValue
 
-    - label: "Step 19a: Read attribute MinCoolSetpointLimit from DUT"
+    - label: "Step 19a: TH reads attribute MinCoolSetpointLimit from DUT"
       PICS: TSTAT.S.A0017 && TSTAT.S.A0018 && TSTAT.S.A0005
       command: "readAttribute"
       attribute: "MinCoolSetpointLimit"
@@ -399,7 +398,7 @@
               minValue: AbsMinCoolSetpointLimitStep5
               maxValue: MaxCoolSetpointLimitValue
 
-    - label: "Step 19b: Read attribute MinCoolSetpointLimit from DUT"
+    - label: "Step 19b: TH reads attribute MinCoolSetpointLimit from DUT"
       PICS: TSTAT.S.A0017 && !TSTAT.S.A0018 && !TSTAT.S.A0005
       command: "readAttribute"
       attribute: "MinCoolSetpointLimit"
@@ -409,7 +408,7 @@
               minValue: 1600
               maxValue: 3200
 
-    - label: "Step 20: Read attribute MaxCoolSetpointLimit from DUT"
+    - label: "Step 20: TH reads the MaxCoolSetpointLimit attribute from the DUT"
       PICS: TSTAT.S.A0018 && TSTAT.S.A0006 && TSTAT.S.A0017
       command: "readAttribute"
       attribute: "MaxCoolSetpointLimit"
@@ -419,7 +418,7 @@
               minValue: MinCoolSetpointLimitValue
               maxValue: AbsMaxCoolSetpointLimitStep6
 
-    - label: "Step 21: Read attribute MinSetpointDeadBand from DUT"
+    - label: "Step 21: TH reads the MinSetpointDeadBand attribute from the DUT"
       PICS: TSTAT.S.F05
       command: "readAttribute"
       attribute: "MinSetpointDeadBand"
@@ -429,7 +428,7 @@
               minValue: 0
               maxValue: 25
 
-    - label: "Step 22: Read RemoteSensing attribute from the DUT"
+    - label: "Step 22: TH reads the RemoteSensing attribute from the DUT"
       PICS: TSTAT.S.A001a
       command: "readAttribute"
       attribute: "RemoteSensing"
@@ -439,7 +438,9 @@
               minValue: 0
               maxValue: 7
 
-    - label: "Step 23: Read attribute ControlSequenceOfOperation from DUT"
+    - label:
+          "Step 23: TH reads the ControlSequenceOfOperation attribute from the
+          DUT"
       PICS: TSTAT.S.A001b
       command: "readAttribute"
       attribute: "ControlSequenceOfOperation"
@@ -449,7 +450,7 @@
               minValue: 0
               maxValue: 5
 
-    - label: "Step 24: Read attribute SystemMode from DUT"
+    - label: "Step 24: TH reads the SystemMode attribute from the DUT"
       PICS: TSTAT.S.A001c
       command: "readAttribute"
       attribute: "SystemMode"
@@ -459,7 +460,8 @@
               minValue: 0
               maxValue: 9
 
-    - label: "Step 26: Read ThermostatRunningMode attribute from the DUT"
+    - label:
+          "Step 26: TH reads the ThermostatRunningMode attribute from the DUT"
       PICS: TSTAT.S.A001e
       command: "readAttribute"
       attribute: "ThermostatRunningMode"
@@ -469,9 +471,7 @@
               minValue: 0
               maxValue: 9
 
-    - label:
-          "Step 27: Reads constraints of optional attributes from DUT:
-          StartOfWeek"
+    - label: "Step 27: TH reads the StartOfWeek attribute from the DUT"
       PICS: TSTAT.S.F03
       command: "readAttribute"
       attribute: "StartOfWeek"
@@ -482,8 +482,8 @@
               maxValue: 6
 
     - label:
-          "Step 28: Reads optional attributes from DUT:
-          NumberOfWeeklyTransitions"
+          "Step 28: TH reads the NumberOfWeeklyTransitions attribute from the
+          DUT"
       PICS: TSTAT.S.F03
       command: "readAttribute"
       attribute: "NumberOfWeeklyTransitions"
@@ -494,7 +494,7 @@
               maxValue: 255
 
     - label:
-          "Step 29: Reads optional attributes from DUT: NumberOfDailyTransitions"
+          "Step 29: TH reads the NumberOfDailyTransitions attribute from the DUT"
       PICS: TSTAT.S.F03
       command: "readAttribute"
       attribute: "NumberOfDailyTransitions"
@@ -504,7 +504,8 @@
               minValue: 0
               maxValue: 255
 
-    - label: "Step 30: Read TemperatureSetpointHold attribute from the DUT"
+    - label:
+          "Step 30: TH reads the TemperatureSetpointHold attribute from the DUT"
       PICS: TSTAT.S.A0023
       command: "readAttribute"
       attribute: "TemperatureSetpointHold"
@@ -515,7 +516,8 @@
               maxValue: 1
 
     - label:
-          "Step 31: Read TemperatureSetpointHoldDuration attribute from the DUT"
+          "Step 31: TH reads the TemperatureSetpointHoldDuration attribute from
+          the DUT"
       PICS: TSTAT.S.A0024
       command: "readAttribute"
       attribute: "TemperatureSetpointHoldDuration"
@@ -526,8 +528,8 @@
               maxValue: 1440
 
     - label:
-          "Step 32: Read ThermostatProgrammingOperationMode attribute from the
-          DUT"
+          "Step 32: TH reads the ThermostatProgrammingOperationMode attribute
+          from the DUT"
       PICS: TSTAT.S.A0025
       command: "readAttribute"
       attribute: "ThermostatProgrammingOperationMode"
@@ -537,7 +539,8 @@
               minValue: 0
               maxValue: 7
 
-    - label: "Step 33: Read ThermostatRunningState attribute from the DUT"
+    - label:
+          "Step 33: TH reads the ThermostatRunningState attribute from the DUT"
       PICS: TSTAT.S.A0029
       command: "readAttribute"
       attribute: "ThermostatRunningState"
@@ -547,7 +550,7 @@
               minValue: 0
               maxValue: 127
 
-    - label: "Step 34: Read SetpointChangeSource attribute from the DUT"
+    - label: "Step 34: TH reads the SetpointChangeSource attribute from the DUT"
       PICS: TSTAT.S.A0030
       command: "readAttribute"
       attribute: "SetpointChangeSource"
@@ -557,7 +560,7 @@
               minValue: 0
               maxValue: 2
 
-    - label: "Step 35: Read SetpointChangeAmount attribute from the DUT"
+    - label: "Step 35: TH reads the SetpointChangeAmount attribute from the DUT"
       PICS: TSTAT.S.A0031
       command: "readAttribute"
       attribute: "SetpointChangeAmount"
@@ -568,7 +571,8 @@
               maxValue: 32767
 
     - label:
-          "Step 36: Read SetpointChangeSourceTimestamp attribute from the DUT"
+          "Step 36: TH reads the SetpointChangeSourceTimestamp attribute from
+          the DUT"
       PICS: TSTAT.S.A0032
       command: "readAttribute"
       attribute: "SetpointChangeSourceTimestamp"
@@ -576,7 +580,7 @@
           constraints:
               type: epoch_s
 
-    - label: "Step 37: Read OccupiedSetback attribute from the DUT"
+    - label: "Step 37: TH reads the OccupiedSetback attribute from the DUT"
       PICS: TSTAT.S.F04
       command: "readAttribute"
       attribute: "OccupiedSetback"
@@ -586,7 +590,7 @@
               minValue: 0
               maxValue: 255
 
-    - label: "Step 38: Read OccupiedSetbackMin attribute from the DUT"
+    - label: "Step 38: TH reads the OccupiedSetbackMin attribute from the DUT"
       PICS: TSTAT.S.F04
       command: "readAttribute"
       attribute: "OccupiedSetbackMin"
@@ -596,7 +600,7 @@
               minValue: 0
               maxValue: 255
 
-    - label: "Step 39: Read OccupiedSetbackMax attribute from the DUT"
+    - label: "Step 39: TH reads the OccupiedSetbackMax attribute from the DUT"
       PICS: TSTAT.S.F04
       command: "readAttribute"
       attribute: "OccupiedSetbackMax"
@@ -606,7 +610,7 @@
               minValue: 0
               maxValue: 255
 
-    - label: "Step 40: Read UnoccupiedSetback attribute from the DUT"
+    - label: "Step 40: TH reads the UnoccupiedSetback attribute from the DUT"
       PICS: TSTAT.S.F02 && TSTAT.S.F04
       command: "readAttribute"
       attribute: "UnoccupiedSetback"
@@ -616,7 +620,7 @@
               minValue: 0
               maxValue: 255
 
-    - label: "Step 41: Read UnoccupiedSetbackMin attribute from the DUT"
+    - label: "Step 41: TH reads the UnoccupiedSetbackMin attribute from the DUT"
       PICS: TSTAT.S.F02 && TSTAT.S.F04
       command: "readAttribute"
       attribute: "UnoccupiedSetbackMin"
@@ -626,7 +630,7 @@
               minValue: 0
               maxValue: 255
 
-    - label: "Step 42: Read UnoccupiedSetbackMax attribute from the DUT"
+    - label: "Step 42: TH reads the UnoccupiedSetbackMax attribute from the DUT"
       PICS: TSTAT.S.F02 && TSTAT.S.F04
       command: "readAttribute"
       attribute: "UnoccupiedSetbackMax"
@@ -636,7 +640,7 @@
               minValue: 0
               maxValue: 255
 
-    - label: "Step 43: Read EmergencyHeatDelta attribute from the DUT"
+    - label: "Step 43: TH reads the EmergencyHeatDelta attribute from the DUT"
       PICS: TSTAT.S.A003a
       command: "readAttribute"
       attribute: "EmergencyHeatDelta"
@@ -646,7 +650,7 @@
               minValue: 0
               maxValue: 255
 
-    - label: "Step 44: Read ACType attribute from the DUT"
+    - label: "Step 44: TH reads the ACType attribute from the DUT"
       PICS: TSTAT.S.A0040
       command: "readAttribute"
       attribute: "ACType"
@@ -656,7 +660,7 @@
               minValue: 0
               maxValue: 4
 
-    - label: "Step 45: Read ACCapacity attribute from the DUT"
+    - label: "Step 45: TH reads the ACCapacity attribute from the DUT"
       PICS: TSTAT.S.A0041
       command: "readAttribute"
       attribute: "ACCapacity"
@@ -666,7 +670,7 @@
               minValue: 0
               maxValue: 65535
 
-    - label: "Step 46: Read ACRefrigerantType attribute from the DUT"
+    - label: "Step 46: TH reads the ACRefrigerantType attribute from the DUT"
       PICS: TSTAT.S.A0042
       command: "readAttribute"
       attribute: "ACRefrigerantType"
@@ -676,7 +680,7 @@
               minValue: 0
               maxValue: 3
 
-    - label: "Step 47: Read ACCompressorType attribute from the DUT"
+    - label: "Step 47: TH reads the ACCompressorType attribute from the DUT"
       PICS: TSTAT.S.A0043
       command: "readAttribute"
       attribute: "ACCompressorType"
@@ -686,7 +690,7 @@
               minValue: 0
               maxValue: 3
 
-    - label: "Step 48: Read ACErrorCode attribute from the DUT"
+    - label: "Step 48: TH reads the ACErrorCode attribute from the DUT"
       PICS: TSTAT.S.A0044
       command: "readAttribute"
       attribute: "ACErrorCode"
@@ -694,7 +698,7 @@
           constraints:
               type: bitmap32
 
-    - label: "Step 49: Read ACLouverPosition attribute from the DUT"
+    - label: "Step 49: TH reads the ACLouverPosition attribute from the DUT"
       PICS: TSTAT.S.A0045
       command: "readAttribute"
       attribute: "ACLouverPosition"
@@ -704,7 +708,7 @@
               minValue: 1
               maxValue: 5
 
-    - label: "Step 50: Read ACCoilTemperature attribute from the DUT"
+    - label: "Step 50: TH reads the ACCoilTemperature attribute from the DUT"
       PICS: TSTAT.S.A0046
       command: "readAttribute"
       attribute: "ACCoilTemperature"
@@ -714,7 +718,7 @@
               minValue: -27315
               maxValue: 32767
 
-    - label: "Step 51: Read ACCapacityFormat attribute from the DUT"
+    - label: "Step 51: TH reads the ACCapacityFormat attribute from the DUT"
       PICS: TSTAT.S.A0047
       command: "readAttribute"
       attribute: "ACCapacityformat"
diff --git a/src/app/tests/suites/certification/Test_TC_TSUIC_1_1.yaml b/src/app/tests/suites/certification/Test_TC_TSUIC_1_1.yaml
index 4ed2aee..066267b 100644
--- a/src/app/tests/suites/certification/Test_TC_TSUIC_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_TSUIC_1_1.yaml
@@ -76,7 +76,16 @@
               type: list
               contains: [2]
 
-    - label: "Step 5: TH reads from the DUT the AcceptedCommandList attribute."
+    - label: "Step 5: TH reads from the DUT the EventList attribute."
+      PICS: PICS_EVENT_LIST_ENABLED
+      command: "readAttribute"
+      attribute: "EventList"
+      response:
+          value: []
+          constraints:
+              type: list
+
+    - label: "Step 6: TH reads from the DUT the AcceptedCommandList attribute."
       command: "readAttribute"
       attribute: "AcceptedCommandList"
       response:
@@ -84,19 +93,10 @@
           constraints:
               type: list
 
-    - label: "Step 6: TH reads from the DUT the GeneratedCommandList attribute."
+    - label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute."
       command: "readAttribute"
       attribute: "GeneratedCommandList"
       response:
           value: []
           constraints:
               type: list
-
-    - label: "Step 7: TH reads from the DUT the EventList attribute."
-      PICS: PICS_EVENT_LIST_ENABLED
-      command: "readAttribute"
-      attribute: "EventList"
-      response:
-          value: []
-          constraints:
-              type: list
diff --git a/src/app/tests/suites/certification/Test_TC_WNCV_3_1.yaml b/src/app/tests/suites/certification/Test_TC_WNCV_3_1.yaml
index 9a7da4b..be641bb 100644
--- a/src/app/tests/suites/certification/Test_TC_WNCV_3_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_WNCV_3_1.yaml
@@ -28,10 +28,10 @@
 
     Step1bWaitTime:
         type: int16u
-        defaultValue: 10000
+        defaultValue: 5000
     Step2bWaitTime:
         type: int16u
-        defaultValue: 500
+        defaultValue: 200
     Step2eWaitTime:
         type: int16u
         defaultValue: 1000
@@ -171,79 +171,17 @@
     ### Depends on the FeatureMap
     # The value of bit 0..1 must be 01b & if (LF) value of bit 2..3 must be 01b else 00b & if (TL) value of bit 4..5 must be 01b else 00b
     # Only 3 possibilities are possible here : 05h =  5, 11h = 17 or 15h = 21 then check a range for simplicity [5  - 21]
-    - label: "Step 3a1: TH reads OperationalStatus attribute's bit 0..1"
+    - label: "Step 3a: TH reads OperationalStatus attribute from DUT"
       PICS: WNCV.S.A000a
       command: "readAttribute"
       attribute: "OperationalStatus"
       response:
-          saveAs: OperationalStatusValue
           constraints:
               type: bitmap8
-              hasMasksSet: [0x1]
-              hasMasksClear: [0x2]
-
-    - label:
-          "Step 3a2: Write attribute BITMAP8 with OperationalStatusValue to do
-          the bits checks in upcoming OperationalStatus read steps."
-      PICS: WNCV.S.A000a
-      cluster: "Unit Testing"
-      command: "writeAttribute"
-      attribute: "bitmap8"
-      arguments:
-          value: OperationalStatusValue
-
-    - label:
-          "Step 3a3: TH checks OperationalStatus value bit 2..3 (WNCV.S.F00(LF))"
-      PICS: WNCV.S.A000a && WNCV.S.F00
-      cluster: "Unit Testing"
-      command: "readAttribute"
-      attribute: "bitmap8"
-      response:
-          value: OperationalStatusValue
-          constraints:
-              type: bitmap8
-              hasMasksSet: [0x4]
-              hasMasksClear: [0x8]
-
-    - label:
-          "Step 3a4: TH check OperationalStatus value bit 2..3 (WNCV.S.F00(LF))"
-      PICS: WNCV.S.A000a && !WNCV.S.F00
-      cluster: "Unit Testing"
-      command: "readAttribute"
-      attribute: "bitmap8"
-      response:
-          value: OperationalStatusValue
-          constraints:
-              type: bitmap8
-              hasMasksClear: [0x4, 0x8]
-
-    - label:
-          "Step 3a5: TH checks OperationalStatus value bit 4..5 (WNCV.S.F01(TL))"
-      PICS: WNCV.S.A000a && WNCV.S.F01
-      cluster: "Unit Testing"
-      command: "readAttribute"
-      attribute: "bitmap8"
-      response:
-          value: OperationalStatusValue
-          constraints:
-              type: bitmap8
-              hasMasksSet: [0x10]
-              hasMasksClear: [0x20]
-
-    - label:
-          "Step 3a6: TH checks OperationalStatus value bit 4..5 (WNCV.S.F01(TL))"
-      PICS: WNCV.S.A000a && !WNCV.S.F01
-      cluster: "Unit Testing"
-      command: "readAttribute"
-      attribute: "bitmap8"
-      response:
-          value: OperationalStatusValue
-          constraints:
-              type: bitmap8
-              hasMasksClear: [0x10, 0x20]
+              anyOf: [5, 17, 21]
 
     ### Depending on the DUT specs we might prefer a arguments here
-    - label: "Step 3a7: DUT updates its attributes"
+    - label: "Step 3a: DUT updates its attributes"
       cluster: "DelayCommands"
       command: "WaitForMs"
       arguments:
diff --git a/src/app/tests/suites/certification/Test_TC_WNCV_3_2.yaml b/src/app/tests/suites/certification/Test_TC_WNCV_3_2.yaml
index 0204775..822a15d 100644
--- a/src/app/tests/suites/certification/Test_TC_WNCV_3_2.yaml
+++ b/src/app/tests/suites/certification/Test_TC_WNCV_3_2.yaml
@@ -28,10 +28,10 @@
 
     Step1bWaitTime:
         type: int16u
-        defaultValue: 10000
+        defaultValue: 5000
     Step2bWaitTime:
         type: int16u
-        defaultValue: 500
+        defaultValue: 200
     Step2eWaitTime:
         type: int16u
         defaultValue: 1000
@@ -40,7 +40,7 @@
         defaultValue: 1000
     Step5aWaitTime:
         type: int16u
-        defaultValue: 500
+        defaultValue: 200
 
 tests:
     - label: "Step 0: Wait for the commissioned device to be retrieved"
@@ -171,79 +171,17 @@
     ### Depends on the FeatureMap
     # The value of bit 0..1 must be 10b & if (LF) value of bit 2..3 must be 10b else 00b & if (TL) value of bit 4..5 must be 10b else 00b
     # Only 3 possibilities are possible here : 0Ah = 10, 22h = 34 or 2Ah = 42 then check a range for simplicity [10 - 42]
-    - label: "Step 3a1: TH reads OperationalStatus attribute's bit 0..1"
+    - label: "Step 3a: TH reads OperationalStatus attribute from DUT"
       PICS: WNCV.S.A000a
       command: "readAttribute"
       attribute: "OperationalStatus"
       response:
-          saveAs: OperationalStatusValue
           constraints:
               type: bitmap8
-              hasMasksSet: [0x2]
-              hasMasksClear: [0x1]
-
-    - label:
-          "Step 3a2: Write attribute BITMAP8 with OperationalStatusValue to do
-          the bits checks in upcoming OperationalStatus read steps."
-      PICS: WNCV.S.A000a
-      cluster: "Unit Testing"
-      command: "writeAttribute"
-      attribute: "bitmap8"
-      arguments:
-          value: OperationalStatusValue
-
-    - label:
-          "Step 3a3: TH checks OperationalStatus value bit 2..3 (WNCV.S.F00(LF))"
-      PICS: WNCV.S.A000a && WNCV.S.F00
-      cluster: "Unit Testing"
-      command: "readAttribute"
-      attribute: "bitmap8"
-      response:
-          value: OperationalStatusValue
-          constraints:
-              type: bitmap8
-              hasMasksSet: [0x8]
-              hasMasksClear: [0x4]
-
-    - label:
-          "Step 3a4: TH checks OperationalStatus value bit 2..3 (WNCV.S.F00(LF))"
-      PICS: WNCV.S.A000a && !WNCV.S.F00
-      cluster: "Unit Testing"
-      command: "readAttribute"
-      attribute: "bitmap8"
-      response:
-          value: OperationalStatusValue
-          constraints:
-              type: bitmap8
-              hasMasksClear: [0x4, 0x8]
-
-    - label:
-          "Step 3a5: TH checks OperationalStatus value bit 4..5 (WNCV.S.F01(TL))"
-      PICS: WNCV.S.A000a && WNCV.S.F01
-      cluster: "Unit Testing"
-      command: "readAttribute"
-      attribute: "bitmap8"
-      response:
-          value: OperationalStatusValue
-          constraints:
-              type: bitmap8
-              hasMasksSet: [0x20]
-              hasMasksClear: [0x10]
-
-    - label:
-          "Step 3a6: TH chesks OperationalStatus value bit 4..5 (WNCV.S.F01(TL))"
-      PICS: WNCV.S.A000a && !WNCV.S.F01
-      cluster: "Unit Testing"
-      command: "readAttribute"
-      attribute: "bitmap8"
-      response:
-          value: OperationalStatusValue
-          constraints:
-              type: bitmap8
-              hasMasksClear: [0x10, 0x20]
+              anyOf: [10, 34, 42]
 
     ### Depending on the DUT specs we might prefer a arguments here
-    - label: "Step 3a7: DUT updates its attributes"
+    - label: "Step 3a: DUT updates its attributes"
       cluster: "DelayCommands"
       command: "WaitForMs"
       arguments:
diff --git a/src/app/tests/suites/certification/Test_TC_WNCV_3_4.yaml b/src/app/tests/suites/certification/Test_TC_WNCV_3_4.yaml
index c93ce30..af2a1c0 100644
--- a/src/app/tests/suites/certification/Test_TC_WNCV_3_4.yaml
+++ b/src/app/tests/suites/certification/Test_TC_WNCV_3_4.yaml
@@ -18,6 +18,7 @@
 
 PICS:
     - WNCV.S
+    - WNCV.S.F02 | WNCV.S.F04
 
 config:
     nodeId: 0x12344321
diff --git a/src/app/tests/suites/certification/Test_TC_WNCV_3_5.yaml b/src/app/tests/suites/certification/Test_TC_WNCV_3_5.yaml
index b1ab57e..71f9f5c 100644
--- a/src/app/tests/suites/certification/Test_TC_WNCV_3_5.yaml
+++ b/src/app/tests/suites/certification/Test_TC_WNCV_3_5.yaml
@@ -15,8 +15,10 @@
 name:
     Window Covering [TC-WNCV-3.5] DownOrClose command Long-Run Verification [DUT
     as Server]
+
 PICS:
     - WNCV.S
+    - WNCV.S.F02 | WNCV.S.F04
 
 config:
     nodeId: 0x12344321
diff --git a/src/app/tests/suites/certification/ci-pics-values b/src/app/tests/suites/certification/ci-pics-values
index d2082e9..9bba640 100644
--- a/src/app/tests/suites/certification/ci-pics-values
+++ b/src/app/tests/suites/certification/ci-pics-values
@@ -337,6 +337,7 @@
 
 #Manual controllable
 DISHM.S.M.CAN_TEST_MODE_FAILURE=1
+DISHM.S.M.CAN_MANUALLY_CONTROLLED=0
 
 #PIXIT
 PIXIT.DISHM.MODE_CHANGE_FAIL=1
@@ -750,6 +751,7 @@
 PIXIT.LWM.MODE_CHANGE_OK=1
 
 LWM.S.M.CAN_TEST_MODE_FAILURE=1
+LWM.S.M.CAN_MANUALLY_CONTROLLED=1
 
 
 # LAUNDRY DRYER MODE CLUSTER
@@ -768,6 +770,7 @@
 DRYERCTRL.S.M.ManuallyControlled=0
 
 # Time Format Localization Cluster
+LTIME.S.F00=1
 LTIME.S=1
 LTIME.S.A0000=1
 LTIME.S.A0001=1
@@ -1032,9 +1035,9 @@
 PS.S.F01=1
 PS.S.F02=0
 PS.S.F03=0
-PS.M.ManualWiredFault=1
-PS.M.ManualBatFault=1
-PS.M.ManualBatChargeFault=1
+PS.S.M.ManualWiredFault=1
+PS.S.M.ManualBatFault=1
+PS.S.M.ManualBatChargeFault=1
 
 PS.C=0
 PS.C.AM-READ=0
@@ -1218,6 +1221,19 @@
 ACT.C.C0a.Tx=0
 ACT.C.C0b.Tx=0
 
+ACT.S.C00.Rsp=1
+ACT.S.C01.Rsp=0
+ACT.S.C02.Rsp=0
+ACT.S.C03.Rsp=0
+ACT.S.C04.Rsp=0
+ACT.S.C05.Rsp=0
+ACT.S.C06.Rsp=0
+ACT.S.C07.Rsp=0
+ACT.S.C08.Rsp=0
+ACT.S.C09.Rsp=0
+ACT.S.C0a.Rsp=0
+ACT.S.C0b.Rsp=0
+
 # Boolean State Cluster
 BOOL.S=1
 BOOL.S.A0000=1
@@ -1696,6 +1712,9 @@
 CNET.S.A0005=1
 CNET.S.A0006=1
 CNET.S.A0007=1
+CNET.S.A0008=0
+CNET.S.A0009=0
+CNET.S.A000A=0
 
 # Features
 CNET.S.F00=0
@@ -2153,7 +2172,7 @@
 ACFREMON.S=1
 ACFREMON.C=0
 ACFREMON.S.F00=1
-ACFREMON.S.F01=1
+ACFREMON.S.F01=0
 ACFREMON.S.F02=1
 ACFREMON.S.A0000=1
 ACFREMON.S.A0001=1
@@ -2501,6 +2520,7 @@
 TCCM.S.C01.Tx=1
 
 TCCM.S.M.CAN_TEST_MODE_FAILURE=1
+TCCM.S.M.CAN_MANUALLY_CONTROLLED=0
 
 #PIXIT
 PIXIT.TCCM.MODE_CHANGE_FAIL=1
diff --git a/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h b/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h
index fc151d4..2cd96b5 100644
--- a/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h
+++ b/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h
@@ -2520,32 +2520,32 @@
         // incorrect mTestIndex value observed when we get the response.
         switch (mTestIndex++) {
         case 0:
-            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: Wait for the commissioned device to be retrieved\n");
-            err = TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0();
+            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: TH1 commissions DUT using admin node ID N1\n");
+            err = TestStep1Th1CommissionsDutUsingAdminNodeIdN1_0();
             break;
         case 1:
-            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads SubjectsPerAccessControlEntry attribute from DUT\n");
+            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH1 reads DUT Endpoint 0 AccessControl cluster SubjectsPerAccessControlEntry attribute\n");
             if (ShouldSkip("ACL.S.A0002")) {
                 NextTest();
                 return;
             }
-            err = TestStep2ThReadsSubjectsPerAccessControlEntryAttributeFromDut_1();
+            err = TestStep2Th1ReadsDutEndpoint0AccessControlClusterSubjectsPerAccessControlEntryAttribute_1();
             break;
         case 2:
-            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TH reads TargetsPerAccessControlEntry attribute from DUT\n");
+            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TH1 reads DUT Endpoint 0 AccessControl cluster TargetsPerAccessControlEntry attribute\n");
             if (ShouldSkip("ACL.S.A0003")) {
                 NextTest();
                 return;
             }
-            err = TestStep3ThReadsTargetsPerAccessControlEntryAttributeFromDut_2();
+            err = TestStep3Th1ReadsDutEndpoint0AccessControlClusterTargetsPerAccessControlEntryAttribute_2();
             break;
         case 3:
-            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4: TH reads AccessControlEntriesPerFabric attribute from DUT\n");
+            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4: TH1 reads DUT Endpoint 0 AccessControl cluster AccessControlEntriesPerFabric attribute\n");
             if (ShouldSkip("ACL.S.A0004")) {
                 NextTest();
                 return;
             }
-            err = TestStep4ThReadsAccessControlEntriesPerFabricAttributeFromDut_3();
+            err = TestStep4Th1ReadsDutEndpoint0AccessControlClusterAccessControlEntriesPerFabricAttribute_3();
             break;
         }
 
@@ -2587,7 +2587,7 @@
     chip::Optional<chip::EndpointId> mEndpoint;
     chip::Optional<uint16_t> mTimeout;
 
-    CHIP_ERROR TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0()
+    CHIP_ERROR TestStep1Th1CommissionsDutUsingAdminNodeIdN1_0()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
@@ -2595,7 +2595,7 @@
         return WaitForCommissionee("alpha", value);
     }
 
-    CHIP_ERROR TestStep2ThReadsSubjectsPerAccessControlEntryAttributeFromDut_1()
+    CHIP_ERROR TestStep2Th1ReadsDutEndpoint0AccessControlClusterSubjectsPerAccessControlEntryAttribute_1()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -2604,9 +2604,9 @@
 
         [cluster readAttributeSubjectsPerAccessControlEntryWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 2: TH reads SubjectsPerAccessControlEntry attribute from DUT: Error: %@", err);
+                NSLog(@"Step 2: TH1 reads DUT Endpoint 0 AccessControl cluster SubjectsPerAccessControlEntry attribute: Error: %@", err);
             } else {
-                NSLog(@"Step 2: TH reads SubjectsPerAccessControlEntry attribute from DUT: Success");
+                NSLog(@"Step 2: TH1 reads DUT Endpoint 0 AccessControl cluster SubjectsPerAccessControlEntry attribute: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -2621,7 +2621,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3ThReadsTargetsPerAccessControlEntryAttributeFromDut_2()
+    CHIP_ERROR TestStep3Th1ReadsDutEndpoint0AccessControlClusterTargetsPerAccessControlEntryAttribute_2()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -2630,9 +2630,9 @@
 
         [cluster readAttributeTargetsPerAccessControlEntryWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3: TH reads TargetsPerAccessControlEntry attribute from DUT: Error: %@", err);
+                NSLog(@"Step 3: TH1 reads DUT Endpoint 0 AccessControl cluster TargetsPerAccessControlEntry attribute: Error: %@", err);
             } else {
-                NSLog(@"Step 3: TH reads TargetsPerAccessControlEntry attribute from DUT: Success");
+                NSLog(@"Step 3: TH1 reads DUT Endpoint 0 AccessControl cluster TargetsPerAccessControlEntry attribute: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -2647,7 +2647,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4ThReadsAccessControlEntriesPerFabricAttributeFromDut_3()
+    CHIP_ERROR TestStep4Th1ReadsDutEndpoint0AccessControlClusterAccessControlEntriesPerFabricAttribute_3()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -2656,15 +2656,15 @@
 
         [cluster readAttributeAccessControlEntriesPerFabricWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4: TH reads AccessControlEntriesPerFabric attribute from DUT: Error: %@", err);
+                NSLog(@"Step 4: TH1 reads DUT Endpoint 0 AccessControl cluster AccessControlEntriesPerFabric attribute: Error: %@", err);
             } else {
-                NSLog(@"Step 4: TH reads AccessControlEntriesPerFabric attribute from DUT: Success");
+                NSLog(@"Step 4: TH1 reads DUT Endpoint 0 AccessControl cluster AccessControlEntriesPerFabric attribute: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
 
             VerifyOrReturn(CheckConstraintType("accessControlEntriesPerFabric", "int16u", "int16u"));
-            VerifyOrReturn(CheckConstraintMinValue<uint16_t>("accessControlEntriesPerFabric", [value unsignedShortValue], 3U));
+            VerifyOrReturn(CheckConstraintMinValue<uint16_t>("accessControlEntriesPerFabric", [value unsignedShortValue], 4U));
             VerifyOrReturn(CheckConstraintMaxValue<uint16_t>("accessControlEntriesPerFabric", [value unsignedShortValue], 65535U));
 
             NextTest();
@@ -2725,8 +2725,8 @@
         // incorrect mTestIndex value observed when we get the response.
         switch (mTestIndex++) {
         case 0:
-            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: Wait for the commissioned device to be retrieved\n");
-            err = TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0();
+            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: TH1 commissions DUT using admin node ID N1\n");
+            err = TestStep1Th1CommissionsDutUsingAdminNodeIdN1_0();
             break;
         case 1:
             ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH1 reads DUT Endpoint 0 OperationalCredentials cluster CurrentFabricIndex attribute\n");
@@ -2974,7 +2974,7 @@
     chip::Optional<chip::ByteSpan> mDBadNone;
     chip::Optional<uint16_t> mTimeout;
 
-    CHIP_ERROR TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0()
+    CHIP_ERROR TestStep1Th1CommissionsDutUsingAdminNodeIdN1_0()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
@@ -6441,35 +6441,35 @@
         // incorrect mTestIndex value observed when we get the response.
         switch (mTestIndex++) {
         case 0:
-            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: Wait for the commissioned device to be retrieved\n");
-            err = TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0();
+            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: Commission DUT to TH (can be skipped if done in a preceding test).\n");
+            err = TestStep1CommissionDutToThCanBeSkippedIfDoneInAPrecedingTest_0();
             break;
         case 1:
-            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Read the global attribute: ClusterRevision\n");
-            err = TestStep2ReadTheGlobalAttributeClusterRevision_1();
+            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads from the DUT the ClusterRevision attribute\n");
+            err = TestStep2ThReadsFromTheDutTheClusterRevisionAttribute_1();
             break;
         case 2:
-            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: Read the global attribute: FeatureMap\n");
-            err = TestStep3ReadTheGlobalAttributeFeatureMap_2();
+            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TH reads from the DUT the FeatureMap attribute\n");
+            err = TestStep3ThReadsFromTheDutTheFeatureMapAttribute_2();
             break;
         case 3:
-            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4: Read the global attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4: TH reads from the DUT the AttributeList attribute.\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep4ReadTheGlobalAttributeAttributeList_3();
+            err = TestStep4ThReadsFromTheDutTheAttributeListAttribute_3();
             break;
         case 4:
-            ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4: Read the global attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4: TH reads from the DUT the AttributeList attribute.\n");
             if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep4ReadTheGlobalAttributeAttributeList_4();
+            err = TestStep4ThReadsFromTheDutTheAttributeListAttribute_4();
             break;
         case 5:
-            ChipLogProgress(chipTool, " ***** Test Step 5 : Step 5: Read the global attribute: EventList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 5 : Step 5: TH reads from the DUT the EventList attribute\n");
             if (ShouldSkip("BOOL.S.E00 && PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
@@ -6477,7 +6477,7 @@
             NextTest();
             return;
         case 6:
-            ChipLogProgress(chipTool, " ***** Test Step 6 : Step 5: Read the global attribute: EventList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 6 : Step 5: TH reads from the DUT the EventList attribute\n");
             if (ShouldSkip(" !BOOL.S.E00 && PICS_EVENT_LIST_ENABLED ")) {
                 NextTest();
                 return;
@@ -6485,12 +6485,12 @@
             NextTest();
             return;
         case 7:
-            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 6: Read the global attribute: AcceptedCommandList\n");
-            err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_7();
+            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 6: TH reads from the DUT the AcceptedCommandList attribute\n");
+            err = TestStep6ThReadsFromTheDutTheAcceptedCommandListAttribute_7();
             break;
         case 8:
-            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 7: Read the global attribute: GeneratedCommandList\n");
-            err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_8();
+            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 7: TH reads from the DUT the GeneratedCommandList attribute\n");
+            err = TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_8();
             break;
         }
 
@@ -6547,7 +6547,7 @@
     chip::Optional<chip::EndpointId> mEndpoint;
     chip::Optional<uint16_t> mTimeout;
 
-    CHIP_ERROR TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0()
+    CHIP_ERROR TestStep1CommissionDutToThCanBeSkippedIfDoneInAPrecedingTest_0()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
@@ -6555,7 +6555,7 @@
         return WaitForCommissionee("alpha", value);
     }
 
-    CHIP_ERROR TestStep2ReadTheGlobalAttributeClusterRevision_1()
+    CHIP_ERROR TestStep2ThReadsFromTheDutTheClusterRevisionAttribute_1()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -6564,9 +6564,9 @@
 
         [cluster readAttributeClusterRevisionWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 2: Read the global attribute: ClusterRevision: Error: %@", err);
+                NSLog(@"Step 2: TH reads from the DUT the ClusterRevision attribute: Error: %@", err);
             } else {
-                NSLog(@"Step 2: Read the global attribute: ClusterRevision: Success");
+                NSLog(@"Step 2: TH reads from the DUT the ClusterRevision attribute: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -6583,7 +6583,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3ReadTheGlobalAttributeFeatureMap_2()
+    CHIP_ERROR TestStep3ThReadsFromTheDutTheFeatureMapAttribute_2()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -6592,9 +6592,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3: Read the global attribute: FeatureMap: Error: %@", err);
+                NSLog(@"Step 3: TH reads from the DUT the FeatureMap attribute: Error: %@", err);
             } else {
-                NSLog(@"Step 3: Read the global attribute: FeatureMap: Success");
+                NSLog(@"Step 3: TH reads from the DUT the FeatureMap attribute: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -6611,7 +6611,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4ReadTheGlobalAttributeAttributeList_3()
+    CHIP_ERROR TestStep4ThReadsFromTheDutTheAttributeListAttribute_3()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -6620,9 +6620,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4: Read the global attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4: TH reads from the DUT the AttributeList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 4: Read the global attribute: AttributeList: Success");
+                NSLog(@"Step 4: TH reads from the DUT the AttributeList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -6642,7 +6642,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4ReadTheGlobalAttributeAttributeList_4()
+    CHIP_ERROR TestStep4ThReadsFromTheDutTheAttributeListAttribute_4()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -6651,9 +6651,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4: Read the global attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4: TH reads from the DUT the AttributeList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 4: Read the global attribute: AttributeList: Success");
+                NSLog(@"Step 4: TH reads from the DUT the AttributeList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -6672,7 +6672,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_7()
+    CHIP_ERROR TestStep6ThReadsFromTheDutTheAcceptedCommandListAttribute_7()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -6681,9 +6681,9 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 6: Read the global attribute: AcceptedCommandList: Error: %@", err);
+                NSLog(@"Step 6: TH reads from the DUT the AcceptedCommandList attribute: Error: %@", err);
             } else {
-                NSLog(@"Step 6: Read the global attribute: AcceptedCommandList: Success");
+                NSLog(@"Step 6: TH reads from the DUT the AcceptedCommandList attribute: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -6700,7 +6700,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_8()
+    CHIP_ERROR TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_8()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -6709,9 +6709,9 @@
 
         [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 7: Read the global attribute: GeneratedCommandList: Error: %@", err);
+                NSLog(@"Step 7: TH reads from the DUT the GeneratedCommandList attribute: Error: %@", err);
             } else {
-                NSLog(@"Step 7: Read the global attribute: GeneratedCommandList: Success");
+                NSLog(@"Step 7: TH reads from the DUT the GeneratedCommandList attribute: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -7028,36 +7028,52 @@
             err = TestStep4oThReadsOptionalAttributeUniqueIDInAttributeList_18();
             break;
         case 19:
-            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 5a: TH reads optional event(StartUp) in EventList\n");
-            if (ShouldSkip("BRBINFO.S.E00 && PICS_EVENT_LIST_ENABLED")) {
+            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 4p: TH reads optional attribute(ProductAppearance) in AttributeList\n");
+            if (ShouldSkip("BRBINFO.S.A0014")) {
                 NextTest();
                 return;
             }
-            NextTest();
-            return;
+            err = TestStep4pThReadsOptionalAttributeProductAppearanceInAttributeList_19();
+            break;
         case 20:
-            ChipLogProgress(chipTool, " ***** Test Step 20 : Step 5b: TH reads optional attribute(ShutDown) in EventList\n");
-            if (ShouldSkip("BRBINFO.S.E01 && PICS_EVENT_LIST_ENABLED")) {
+            ChipLogProgress(chipTool, " ***** Test Step 20 : Step 5a: TH reads from the DUT the EventList attribute\n");
+            if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
         case 21:
-            ChipLogProgress(chipTool, " ***** Test Step 21 : Step 5c: TH reads optional attribute(Leave) in EventList\n");
-            if (ShouldSkip("BRBINFO.S.E02 && PICS_EVENT_LIST_ENABLED")) {
+            ChipLogProgress(chipTool, " ***** Test Step 21 : Step 5b: TH reads optional event(StartUp) in EventList\n");
+            if (ShouldSkip("BRBINFO.S.E00 && PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
         case 22:
-            ChipLogProgress(chipTool, " ***** Test Step 22 : Step 6: TH reads AcceptedCommandList from DUT\n");
-            err = TestStep6ThReadsAcceptedCommandListFromDut_22();
-            break;
+            ChipLogProgress(chipTool, " ***** Test Step 22 : Step 5c: TH reads optional attribute(ShutDown) in EventList\n");
+            if (ShouldSkip("BRBINFO.S.E01 && PICS_EVENT_LIST_ENABLED")) {
+                NextTest();
+                return;
+            }
+            NextTest();
+            return;
         case 23:
-            ChipLogProgress(chipTool, " ***** Test Step 23 : Step 7: TH1 reads GeneratedCommandList from DUT\n");
-            err = TestStep7Th1ReadsGeneratedCommandListFromDut_23();
+            ChipLogProgress(chipTool, " ***** Test Step 23 : Step 5d TH reads optional attribute(Leave) in EventList\n");
+            if (ShouldSkip("BRBINFO.S.E02 && PICS_EVENT_LIST_ENABLED")) {
+                NextTest();
+                return;
+            }
+            NextTest();
+            return;
+        case 24:
+            ChipLogProgress(chipTool, " ***** Test Step 24 : Step 6: TH reads AcceptedCommandList from DUT\n");
+            err = TestStep6ThReadsAcceptedCommandListFromDut_24();
+            break;
+        case 25:
+            ChipLogProgress(chipTool, " ***** Test Step 25 : Step 7: TH1 reads GeneratedCommandList from DUT\n");
+            err = TestStep7Th1ReadsGeneratedCommandListFromDut_25();
             break;
         }
 
@@ -7142,6 +7158,12 @@
         case 23:
             VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
             break;
+        case 24:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
+        case 25:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
         }
 
         // Go on to the next test.
@@ -7152,7 +7174,7 @@
 
 private:
     std::atomic_uint16_t mTestIndex;
-    const uint16_t mTestCount = 24;
+    const uint16_t mTestCount = 26;
 
     chip::Optional<chip::NodeId> mNodeId;
     chip::Optional<chip::CharSpan> mCluster;
@@ -7634,7 +7656,32 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6ThReadsAcceptedCommandListFromDut_22()
+    CHIP_ERROR TestStep4pThReadsOptionalAttributeProductAppearanceInAttributeList_19()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasicInformation alloc] initWithDevice:device endpointID:@(3) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 4p: TH reads optional attribute(ProductAppearance) in AttributeList: Error: %@", err);
+            } else {
+                NSLog(@"Step 4p: TH reads optional attribute(ProductAppearance) in AttributeList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("attributeList", value, 20UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep6ThReadsAcceptedCommandListFromDut_24()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -7662,7 +7709,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep7Th1ReadsGeneratedCommandListFromDut_23()
+    CHIP_ERROR TestStep7Th1ReadsGeneratedCommandListFromDut_25()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -7736,20 +7783,20 @@
             err = TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0();
             break;
         case 1:
-            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Read the global attribute: ClusterRevision\n");
-            err = TestStep2ReadTheGlobalAttributeClusterRevision_1();
+            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads from the DUT the ClusterRevision attribute.\n");
+            err = TestStep2ThReadsFromTheDutTheClusterRevisionAttribute_1();
             break;
         case 2:
-            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: Read the global attribute: FeatureMap\n");
-            err = TestStep3ReadTheGlobalAttributeFeatureMap_2();
+            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TH reads from the DUT the FeatureMap attribute.\n");
+            err = TestStep3ThReadsFromTheDutTheFeatureMapAttribute_2();
             break;
         case 3:
-            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: Read the global attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: TH reads from the DUT the AttributeList attribute.\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep4aReadTheGlobalAttributeAttributeList_3();
+            err = TestStep4aThReadsFromTheDutTheAttributeListAttribute_3();
             break;
         case 4:
             ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: Read the global attribute: AttributeList\n");
@@ -7769,19 +7816,111 @@
             break;
         case 6:
             ChipLogProgress(chipTool, " ***** Test Step 6 : Step 5: TH reads EventList attribute from DUT\n");
-            if (ShouldSkip("PICS_USER_PROMPT && PICS_EVENT_LIST_ENABLED")) {
+            if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep5ThReadsEventListAttributeFromDut_6();
-            break;
+            NextTest();
+            return;
         case 7:
-            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 6: Read the global attribute: AcceptedCommandList\n");
-            err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_7();
+            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 6a: TH Read the optional command (InstantAction) in AcceptedCommandList\n");
+            if (ShouldSkip("ACT.S.C00.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6aThReadTheOptionalCommandInstantActionInAcceptedCommandList_7();
             break;
         case 8:
-            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 7: Read the global attribute: GeneratedCommandList\n");
-            err = TestStep7ReadTheGlobalAttributeGeneratedCommandList_8();
+            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 6b: TH Read the optional command (InstantActionWithTransition) in AcceptedCommandList\n");
+            if (ShouldSkip("ACT.S.C01.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6bThReadTheOptionalCommandInstantActionWithTransitionInAcceptedCommandList_8();
+            break;
+        case 9:
+            ChipLogProgress(chipTool, " ***** Test Step 9 : Step 6C: TH Read the optional command (StartAction) in AcceptedCommandList\n");
+            if (ShouldSkip("ACT.S.C02.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6cThReadTheOptionalCommandStartActionInAcceptedCommandList_9();
+            break;
+        case 10:
+            ChipLogProgress(chipTool, " ***** Test Step 10 : Step 6d: TH Read the optional command (StartActionWithDuration) in AcceptedCommandList\n");
+            if (ShouldSkip("ACT.S.C03.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6dThReadTheOptionalCommandStartActionWithDurationInAcceptedCommandList_10();
+            break;
+        case 11:
+            ChipLogProgress(chipTool, " ***** Test Step 11 : Step 6e: TH Read the optional command (StopAction) in AcceptedCommandList\n");
+            if (ShouldSkip("ACT.S.C04.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6eThReadTheOptionalCommandStopActionInAcceptedCommandList_11();
+            break;
+        case 12:
+            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 6f: TH Read the optional command (PauseAction) in AcceptedCommandList\n");
+            if (ShouldSkip("ACT.S.C05.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6fThReadTheOptionalCommandPauseActionInAcceptedCommandList_12();
+            break;
+        case 13:
+            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 6g: TH Read the optional command (PauseActionWithDuration) in AcceptedCommandList\n");
+            if (ShouldSkip("ACT.S.C06.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6gThReadTheOptionalCommandPauseActionWithDurationInAcceptedCommandList_13();
+            break;
+        case 14:
+            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 6h: TH Read the optional command (ResumeAction) in AcceptedCommandList\n");
+            if (ShouldSkip("ACT.S.C07.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6hThReadTheOptionalCommandResumeActionInAcceptedCommandList_14();
+            break;
+        case 15:
+            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 6i: TH Read the optional command (EnableAction) in AcceptedCommandList\n");
+            if (ShouldSkip("ACT.S.C08.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6iThReadTheOptionalCommandEnableActionInAcceptedCommandList_15();
+            break;
+        case 16:
+            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 6j: TH Read the optional command (EnableActionWithDuration) in AcceptedCommandList\n");
+            if (ShouldSkip("ACT.S.C09.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6jThReadTheOptionalCommandEnableActionWithDurationInAcceptedCommandList_16();
+            break;
+        case 17:
+            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 6k: TH Read the optional command (DisableAction) in AcceptedCommandList\n");
+            if (ShouldSkip("ACT.S.C0a.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6kThReadTheOptionalCommandDisableActionInAcceptedCommandList_17();
+            break;
+        case 18:
+            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 6l: TH Read the optional command (DisableActionWithDuration) in AcceptedCommandList\n");
+            if (ShouldSkip("ACT.S.C0b.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6lThReadTheOptionalCommandDisableActionWithDurationInAcceptedCommandList_18();
+            break;
+        case 19:
+            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 7: TH reads from the DUT the GeneratedCommandList attribute.\n");
+            err = TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_19();
             break;
         }
 
@@ -7821,6 +7960,39 @@
         case 8:
             VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
             break;
+        case 9:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
+        case 10:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
+        case 11:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
+        case 12:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
+        case 13:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
+        case 14:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
+        case 15:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
+        case 16:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
+        case 17:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
+        case 18:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
+        case 19:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
         }
 
         // Go on to the next test.
@@ -7831,7 +8003,7 @@
 
 private:
     std::atomic_uint16_t mTestIndex;
-    const uint16_t mTestCount = 9;
+    const uint16_t mTestCount = 20;
 
     chip::Optional<chip::NodeId> mNodeId;
     chip::Optional<chip::CharSpan> mCluster;
@@ -7846,7 +8018,7 @@
         return WaitForCommissionee("alpha", value);
     }
 
-    CHIP_ERROR TestStep2ReadTheGlobalAttributeClusterRevision_1()
+    CHIP_ERROR TestStep2ThReadsFromTheDutTheClusterRevisionAttribute_1()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -7855,9 +8027,9 @@
 
         [cluster readAttributeClusterRevisionWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 2: Read the global attribute: ClusterRevision: Error: %@", err);
+                NSLog(@"Step 2: TH reads from the DUT the ClusterRevision attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 2: Read the global attribute: ClusterRevision: Success");
+                NSLog(@"Step 2: TH reads from the DUT the ClusterRevision attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -7874,7 +8046,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3ReadTheGlobalAttributeFeatureMap_2()
+    CHIP_ERROR TestStep3ThReadsFromTheDutTheFeatureMapAttribute_2()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -7883,9 +8055,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3: Read the global attribute: FeatureMap: Error: %@", err);
+                NSLog(@"Step 3: TH reads from the DUT the FeatureMap attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 3: Read the global attribute: FeatureMap: Success");
+                NSLog(@"Step 3: TH reads from the DUT the FeatureMap attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -7902,7 +8074,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4aReadTheGlobalAttributeAttributeList_3()
+    CHIP_ERROR TestStep4aThReadsFromTheDutTheAttributeListAttribute_3()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -7911,9 +8083,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4a: TH reads from the DUT the AttributeList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Success");
+                NSLog(@"Step 4a: TH reads from the DUT the AttributeList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -7990,17 +8162,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5ThReadsEventListAttributeFromDut_6()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message = chip::Span<const char>("Please enter 'y' for successgarbage: not in length on purpose", 28);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-
-    CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_7()
+    CHIP_ERROR TestStep6aThReadTheOptionalCommandInstantActionInAcceptedCommandList_7()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -8009,22 +8171,298 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 6: Read the global attribute: AcceptedCommandList: Error: %@", err);
+                NSLog(@"Step 6a: TH Read the optional command (InstantAction) in AcceptedCommandList: Error: %@", err);
             } else {
-                NSLog(@"Step 6: Read the global attribute: AcceptedCommandList: Success");
+                NSLog(@"Step 6a: TH Read the optional command (InstantAction) in AcceptedCommandList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
 
             VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
-            VerifyOrReturn(CheckConstraintMaxLength("acceptedCommandList", value, 11));
+            VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 0UL));
+
             NextTest();
         }];
 
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep7ReadTheGlobalAttributeGeneratedCommandList_8()
+    CHIP_ERROR TestStep6bThReadTheOptionalCommandInstantActionWithTransitionInAcceptedCommandList_8()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterActions alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 6b: TH Read the optional command (InstantActionWithTransition) in AcceptedCommandList: Error: %@", err);
+            } else {
+                NSLog(@"Step 6b: TH Read the optional command (InstantActionWithTransition) in AcceptedCommandList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 1UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep6cThReadTheOptionalCommandStartActionInAcceptedCommandList_9()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterActions alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 6C: TH Read the optional command (StartAction) in AcceptedCommandList: Error: %@", err);
+            } else {
+                NSLog(@"Step 6C: TH Read the optional command (StartAction) in AcceptedCommandList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 2UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep6dThReadTheOptionalCommandStartActionWithDurationInAcceptedCommandList_10()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterActions alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 6d: TH Read the optional command (StartActionWithDuration) in AcceptedCommandList: Error: %@", err);
+            } else {
+                NSLog(@"Step 6d: TH Read the optional command (StartActionWithDuration) in AcceptedCommandList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 3UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep6eThReadTheOptionalCommandStopActionInAcceptedCommandList_11()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterActions alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 6e: TH Read the optional command (StopAction) in AcceptedCommandList: Error: %@", err);
+            } else {
+                NSLog(@"Step 6e: TH Read the optional command (StopAction) in AcceptedCommandList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 4UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep6fThReadTheOptionalCommandPauseActionInAcceptedCommandList_12()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterActions alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 6f: TH Read the optional command (PauseAction) in AcceptedCommandList: Error: %@", err);
+            } else {
+                NSLog(@"Step 6f: TH Read the optional command (PauseAction) in AcceptedCommandList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 5UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep6gThReadTheOptionalCommandPauseActionWithDurationInAcceptedCommandList_13()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterActions alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 6g: TH Read the optional command (PauseActionWithDuration) in AcceptedCommandList: Error: %@", err);
+            } else {
+                NSLog(@"Step 6g: TH Read the optional command (PauseActionWithDuration) in AcceptedCommandList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 6UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep6hThReadTheOptionalCommandResumeActionInAcceptedCommandList_14()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterActions alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 6h: TH Read the optional command (ResumeAction) in AcceptedCommandList: Error: %@", err);
+            } else {
+                NSLog(@"Step 6h: TH Read the optional command (ResumeAction) in AcceptedCommandList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 7UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep6iThReadTheOptionalCommandEnableActionInAcceptedCommandList_15()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterActions alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 6i: TH Read the optional command (EnableAction) in AcceptedCommandList: Error: %@", err);
+            } else {
+                NSLog(@"Step 6i: TH Read the optional command (EnableAction) in AcceptedCommandList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 8UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep6jThReadTheOptionalCommandEnableActionWithDurationInAcceptedCommandList_16()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterActions alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 6j: TH Read the optional command (EnableActionWithDuration) in AcceptedCommandList: Error: %@", err);
+            } else {
+                NSLog(@"Step 6j: TH Read the optional command (EnableActionWithDuration) in AcceptedCommandList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 9UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep6kThReadTheOptionalCommandDisableActionInAcceptedCommandList_17()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterActions alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 6k: TH Read the optional command (DisableAction) in AcceptedCommandList: Error: %@", err);
+            } else {
+                NSLog(@"Step 6k: TH Read the optional command (DisableAction) in AcceptedCommandList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 10UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep6lThReadTheOptionalCommandDisableActionWithDurationInAcceptedCommandList_18()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterActions alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 6l: TH Read the optional command (DisableActionWithDuration) in AcceptedCommandList: Error: %@", err);
+            } else {
+                NSLog(@"Step 6l: TH Read the optional command (DisableActionWithDuration) in AcceptedCommandList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 11UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_19()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -8033,9 +8471,9 @@
 
         [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 7: Read the global attribute: GeneratedCommandList: Error: %@", err);
+                NSLog(@"Step 7: TH reads from the DUT the GeneratedCommandList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 7: Read the global attribute: GeneratedCommandList: Success");
+                NSLog(@"Step 7: TH reads from the DUT the GeneratedCommandList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -45290,52 +45728,60 @@
             err = TestStep4iThReadsOptionalAttributeUniqueIDInAttributeList_12();
             break;
         case 13:
-            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 5a: TH reads EventList from DUT\n");
+            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 4j: TH reads optional attribute(ProductAppearance) in attributeList\n");
+            if (ShouldSkip("BINFO.S.A0014")) {
+                NextTest();
+                return;
+            }
+            err = TestStep4jThReadsOptionalAttributeProductAppearanceInAttributeList_13();
+            break;
+        case 14:
+            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 5a: TH reads EventList from DUT\n");
             if (ShouldSkip(" !BINFO.S.E00 && !BINFO.S.E01 && !BINFO.S.E02 && !BINFO.S.A0011 && PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
-        case 14:
-            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 5b: Read BINFO.S.E00(StartUp) event in EventList\n");
+        case 15:
+            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 5b: TH reads BINFO.S.E00(StartUp) event in EventList\n");
             if (ShouldSkip("BINFO.S.E00 && PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
-        case 15:
-            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 5c: Read BINFO.S.E01(ShutDown) event in EventList\n");
+        case 16:
+            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 5c: TH reads BINFO.S.E01(ShutDown) event in EventList\n");
             if (ShouldSkip("BINFO.S.E01 && PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
-        case 16:
-            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 5d: Read BINFO.S.E02(Leave) event in EventList\n");
+        case 17:
+            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 5d: TH reads BINFO.S.E02(Leave) event in EventList\n");
             if (ShouldSkip("BINFO.S.E02 && PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
-        case 17:
-            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 5e: Read (ReachableChanged) event in EventList\n");
+        case 18:
+            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 5e: TH reads (ReachableChanged) event in EventList\n");
             if (ShouldSkip("BINFO.S.A0011 && PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
-        case 18:
-            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 6: TH reads from the DUT the AcceptedCommandList attribute.\n");
-            err = TestStep6ThReadsFromTheDutTheAcceptedCommandListAttribute_18();
-            break;
         case 19:
-            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 7: TH reads from the DUT the GeneratedCommandList attribute.\n");
-            err = TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_19();
+            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 6: TH reads from the DUT the AcceptedCommandList attribute.\n");
+            err = TestStep6ThReadsFromTheDutTheAcceptedCommandListAttribute_19();
+            break;
+        case 20:
+            ChipLogProgress(chipTool, " ***** Test Step 20 : Step 7: TH reads from the DUT the GeneratedCommandList attribute.\n");
+            err = TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_20();
             break;
         }
 
@@ -45408,6 +45854,9 @@
         case 19:
             VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
             break;
+        case 20:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
         }
 
         // Go on to the next test.
@@ -45418,7 +45867,7 @@
 
 private:
     std::atomic_uint16_t mTestIndex;
-    const uint16_t mTestCount = 20;
+    const uint16_t mTestCount = 21;
 
     chip::Optional<chip::NodeId> mNodeId;
     chip::Optional<chip::CharSpan> mCluster;
@@ -45772,7 +46221,32 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6ThReadsFromTheDutTheAcceptedCommandListAttribute_18()
+    CHIP_ERROR TestStep4jThReadsOptionalAttributeProductAppearanceInAttributeList_13()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterBasicInformation alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 4j: TH reads optional attribute(ProductAppearance) in attributeList: Error: %@", err);
+            } else {
+                NSLog(@"Step 4j: TH reads optional attribute(ProductAppearance) in attributeList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("attributeList", value, 20UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep6ThReadsFromTheDutTheAcceptedCommandListAttribute_19()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -45795,7 +46269,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_19()
+    CHIP_ERROR TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_20()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -45869,136 +46343,152 @@
             err = TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0();
             break;
         case 1:
-            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Read the global attribute: ClusterRevision\n");
-            err = TestStep2ReadTheGlobalAttributeClusterRevision_1();
+            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads from the DUT the ClusterRevision attribute\n");
+            err = TestStep2ThReadsFromTheDutTheClusterRevisionAttribute_1();
             break;
         case 2:
-            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3a: Read the global attribute: FeatureMap\n");
+            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3a: TH reads from the DUT the FeatureMap attribute\n");
             if (ShouldSkip(" !CNET.S.F00 && !CNET.S.F01 && !CNET.S.F02 ")) {
                 NextTest();
                 return;
             }
-            err = TestStep3aReadTheGlobalAttributeFeatureMap_2();
+            err = TestStep3aThReadsFromTheDutTheFeatureMapAttribute_2();
             break;
         case 3:
-            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 3b: Read the global attribute: FeatureMap when CNET.S.F00 is set\n");
+            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 3b: TH reads the global attribute: FeatureMap when CNET.S.F00 is set\n");
             if (ShouldSkip("CNET.S.F00")) {
                 NextTest();
                 return;
             }
-            err = TestStep3bReadTheGlobalAttributeFeatureMapWhenCnetsf00IsSet_3();
+            err = TestStep3bThReadsTheGlobalAttributeFeatureMapWhenCnetsf00IsSet_3();
             break;
         case 4:
-            ChipLogProgress(chipTool, " ***** Test Step 4 : Step 3c: Read the global attribute: FeatureMap when CNET.S.F01 is set\n");
+            ChipLogProgress(chipTool, " ***** Test Step 4 : Step 3c: TH reads the global attribute: FeatureMap when CNET.S.F01 is set\n");
             if (ShouldSkip("CNET.S.F01")) {
                 NextTest();
                 return;
             }
-            err = TestStep3cReadTheGlobalAttributeFeatureMapWhenCnetsf01IsSet_4();
+            err = TestStep3cThReadsTheGlobalAttributeFeatureMapWhenCnetsf01IsSet_4();
             break;
         case 5:
-            ChipLogProgress(chipTool, " ***** Test Step 5 : Step 3d: Read the global attribute: FeatureMap when CNET.S.F02 is set\n");
+            ChipLogProgress(chipTool, " ***** Test Step 5 : Step 3d: TH reads the global attribute: FeatureMap when CNET.S.F02 is set\n");
             if (ShouldSkip("CNET.S.F02")) {
                 NextTest();
                 return;
             }
-            err = TestStep3dReadTheGlobalAttributeFeatureMapWhenCnetsf02IsSet_5();
+            err = TestStep3dThReadsTheGlobalAttributeFeatureMapWhenCnetsf02IsSet_5();
             break;
         case 6:
-            ChipLogProgress(chipTool, " ***** Test Step 6 : Step 4a: Read the global attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 6 : Step 4a: TH reads from the DUT the AttributeList attribute\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep4aReadTheGlobalAttributeAttributeList_6();
+            err = TestStep4aThReadsFromTheDutTheAttributeListAttribute_6();
             break;
         case 7:
-            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4a: Read the global attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4b: TH reads from the DUT the AttributeList attribute.\n");
             if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep4aReadTheGlobalAttributeAttributeList_7();
+            err = TestStep4bThReadsFromTheDutTheAttributeListAttribute_7();
             break;
         case 8:
-            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4b: Read mandatory attributes in AttributeList if CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) is true\n");
+            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4c: TH reads mandatory attributes in AttributeList if CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) is true\n");
             if (ShouldSkip("CNET.S.F00 || CNET.S.F01 || CNET.S.F02")) {
                 NextTest();
                 return;
             }
-            err = TestStep4bReadMandatoryAttributesInAttributeListIfCnetsf00wiCnetsf01thCnetsf02etIsTrue_8();
+            err = TestStep4cThReadsMandatoryAttributesInAttributeListIfCnetsf00wiCnetsf01thCnetsf02etIsTrue_8();
             break;
         case 9:
-            ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4c: Read the optional attribute(ScanMaxTimeSeconds): AttributeList\n");
-            if (ShouldSkip("CNET.S.A0002")) {
+            ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4d: TH reads the feature dependent attribute(ScanMaxTimeSeconds): AttributeList\n");
+            if (ShouldSkip("CNET.S.F00 || CNET.S.F01")) {
                 NextTest();
                 return;
             }
-            err = TestStep4cReadTheOptionalAttributeScanMaxTimeSecondsAttributeList_9();
+            err = TestStep4dThReadsTheFeatureDependentAttributeScanMaxTimeSecondsAttributeList_9();
             break;
         case 10:
-            ChipLogProgress(chipTool, " ***** Test Step 10 : Step 4d: Reading optional attribute(ConnectMaxTimeSeconds) in AttributeList\n");
-            if (ShouldSkip("CNET.S.A0003")) {
+            ChipLogProgress(chipTool, " ***** Test Step 10 : Step 4e: TH reads the feature dependent attribute(ConnectMaxTimeSeconds) in AttributeList\n");
+            if (ShouldSkip("CNET.S.F00 || CNET.S.F01")) {
                 NextTest();
                 return;
             }
-            err = TestStep4dReadingOptionalAttributeConnectMaxTimeSecondsInAttributeList_10();
+            err = TestStep4eThReadsTheFeatureDependentAttributeConnectMaxTimeSecondsInAttributeList_10();
             break;
         case 11:
-            ChipLogProgress(chipTool, " ***** Test Step 11 : Step 5: Read the global attribute: EventList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 11 : Step 4f: TH reads WIFI related attribute (SupportedWiFiBands) in AttributeList\n");
+            if (ShouldSkip("CNET.S.F00")) {
+                NextTest();
+                return;
+            }
+            err = TestStep4fThReadsWifiRelatedAttributeSupportedWiFiBandsInAttributeList_11();
+            break;
+        case 12:
+            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 4g: TH reads Thread related attribute (SupportedWiFiBands and ThreadVersion) in AttributeList\n");
+            if (ShouldSkip("CNET.S.F01")) {
+                NextTest();
+                return;
+            }
+            err = TestStep4gThReadsThreadRelatedAttributeSupportedWiFiBandsAndThreadVersionInAttributeList_12();
+            break;
+        case 13:
+            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 5: TH reads from the DUT the EventList attribute\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
-        case 12:
-            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 6a: Read AcceptedCommandList If DUT supports Wi-Fi/Thread related features CNET.S.F00(WI),CNET.S.F01(TH)\n");
+        case 14:
+            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 6a: TH reads AcceptedCommandList attribute from DUT. If DUT supports Wi-Fi/Thread related features CNET.S.F00(WI),CNET.S.F01(TH)\n");
             if (ShouldSkip("( CNET.S.F00 || CNET.S.F01 )")) {
                 NextTest();
                 return;
             }
-            err = TestStep6aReadAcceptedCommandListIfDutSupportsWiFiThreadRelatedFeaturesCnetsf00wicnetsf01th_12();
+            err = TestStep6aThReadsAcceptedCommandListAttributeFromDutIfDutSupportsWiFiThreadRelatedFeaturesCnetsf00wicnetsf01th_14();
             break;
-        case 13:
-            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 6b: Read AcceptedCommandList If DUT supports Wi-Fi related features (CNET.S.F00(WI) is true)\n");
+        case 15:
+            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 6b: TH reads AcceptedCommandList attribute from DUT. If DUT supports Wi-Fi related features (CNET.S.F00(WI) is true)\n");
             if (ShouldSkip("CNET.S.F00")) {
                 NextTest();
                 return;
             }
-            err = TestStep6bReadAcceptedCommandListIfDutSupportsWiFiRelatedFeaturesCnetsf00wiIsTrue_13();
+            err = TestStep6bThReadsAcceptedCommandListAttributeFromDutIfDutSupportsWiFiRelatedFeaturesCnetsf00wiIsTrue_15();
             break;
-        case 14:
-            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 6c: Read AcceptedCommandList If DUT supports Thread related features(CNET.S.F01(TH) is true)\n");
+        case 16:
+            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 6c: TH reads AcceptedCommandList attribute from DUT. If DUT supports Thread related features(CNET.S.F01(TH) is true)\n");
             if (ShouldSkip("CNET.S.F01")) {
                 NextTest();
                 return;
             }
-            err = TestStep6cReadAcceptedCommandListIfDutSupportsThreadRelatedFeaturesCNETSF01THIsTrue_14();
+            err = TestStep6cThReadsAcceptedCommandListAttributeFromDutIfDutSupportsThreadRelatedFeaturesCNETSF01THIsTrue_16();
             break;
-        case 15:
-            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 6d: Read AcceptedCommandList If DUT supports Ethernet related features(CNET.S.F02(TH) is true)\n");
+        case 17:
+            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 6d: TH reads AcceptedCommandList attribute from DUT. If DUT supports Ethernet related features(CNET.S.F02(TH) is true)\n");
             if (ShouldSkip("CNET.S.F02")) {
                 NextTest();
                 return;
             }
-            err = TestStep6dReadAcceptedCommandListIfDutSupportsEthernetRelatedFeaturesCNETSF02THIsTrue_15();
+            err = TestStep6dThReadsAcceptedCommandListAttributeFromDutIfDutSupportsEthernetRelatedFeaturesCNETSF02THIsTrue_17();
             break;
-        case 16:
-            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 7a: Read the GeneratedCommandList If DUT supports Wi-Fi/Thread related features(CNET.S.F00(WI) or CNET.S.F01(TH) is true)\n");
+        case 18:
+            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 7a: TH reads the GeneratedCommandList attribute from DUT. If DUT supports Wi-Fi/Thread related features(CNET.S.F00(WI) or CNET.S.F01(TH) is true)\n");
             if (ShouldSkip("( CNET.S.F00 || CNET.S.F01 )")) {
                 NextTest();
                 return;
             }
-            err = TestStep7aReadTheGeneratedCommandListIfDutSupportsWiFiThreadRelatedFeaturesCNETSF00WIOrCnetsf01thIsTrue_16();
+            err = TestStep7aThReadsTheGeneratedCommandListAttributeFromDutIfDutSupportsWiFiThreadRelatedFeaturesCNETSF00WIOrCnetsf01thIsTrue_18();
             break;
-        case 17:
-            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 7b: Read the GeneratedCommandList If DUT supports Ethernet related features(CNET.S.F02(ET) must be true)\n");
+        case 19:
+            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 7b: Read the GeneratedCommandList attribute from DUT. If DUT supports Ethernet related features(CNET.S.F02(ET) must be true)\n");
             if (ShouldSkip("CNET.S.F02")) {
                 NextTest();
                 return;
             }
-            err = TestStep7bReadTheGeneratedCommandListIfDutSupportsEthernetRelatedFeaturesCNETSF02ETMustBeTrue_17();
+            err = TestStep7bReadTheGeneratedCommandListAttributeFromDutIfDutSupportsEthernetRelatedFeaturesCNETSF02ETMustBeTrue_19();
             break;
         }
 
@@ -46065,6 +46555,12 @@
         case 17:
             VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
             break;
+        case 18:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
+        case 19:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
         }
 
         // Go on to the next test.
@@ -46075,7 +46571,7 @@
 
 private:
     std::atomic_uint16_t mTestIndex;
-    const uint16_t mTestCount = 18;
+    const uint16_t mTestCount = 20;
 
     chip::Optional<chip::NodeId> mNodeId;
     chip::Optional<chip::CharSpan> mCluster;
@@ -46090,7 +46586,7 @@
         return WaitForCommissionee("alpha", value);
     }
 
-    CHIP_ERROR TestStep2ReadTheGlobalAttributeClusterRevision_1()
+    CHIP_ERROR TestStep2ThReadsFromTheDutTheClusterRevisionAttribute_1()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46099,9 +46595,9 @@
 
         [cluster readAttributeClusterRevisionWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 2: Read the global attribute: ClusterRevision: Error: %@", err);
+                NSLog(@"Step 2: TH reads from the DUT the ClusterRevision attribute: Error: %@", err);
             } else {
-                NSLog(@"Step 2: Read the global attribute: ClusterRevision: Success");
+                NSLog(@"Step 2: TH reads from the DUT the ClusterRevision attribute: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46118,7 +46614,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3aReadTheGlobalAttributeFeatureMap_2()
+    CHIP_ERROR TestStep3aThReadsFromTheDutTheFeatureMapAttribute_2()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46127,9 +46623,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3a: Read the global attribute: FeatureMap: Error: %@", err);
+                NSLog(@"Step 3a: TH reads from the DUT the FeatureMap attribute: Error: %@", err);
             } else {
-                NSLog(@"Step 3a: Read the global attribute: FeatureMap: Success");
+                NSLog(@"Step 3a: TH reads from the DUT the FeatureMap attribute: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46145,7 +46641,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3bReadTheGlobalAttributeFeatureMapWhenCnetsf00IsSet_3()
+    CHIP_ERROR TestStep3bThReadsTheGlobalAttributeFeatureMapWhenCnetsf00IsSet_3()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46154,9 +46650,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3b: Read the global attribute: FeatureMap when CNET.S.F00 is set: Error: %@", err);
+                NSLog(@"Step 3b: TH reads the global attribute: FeatureMap when CNET.S.F00 is set: Error: %@", err);
             } else {
-                NSLog(@"Step 3b: Read the global attribute: FeatureMap when CNET.S.F00 is set: Success");
+                NSLog(@"Step 3b: TH reads the global attribute: FeatureMap when CNET.S.F00 is set: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46172,7 +46668,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3cReadTheGlobalAttributeFeatureMapWhenCnetsf01IsSet_4()
+    CHIP_ERROR TestStep3cThReadsTheGlobalAttributeFeatureMapWhenCnetsf01IsSet_4()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46181,9 +46677,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3c: Read the global attribute: FeatureMap when CNET.S.F01 is set: Error: %@", err);
+                NSLog(@"Step 3c: TH reads the global attribute: FeatureMap when CNET.S.F01 is set: Error: %@", err);
             } else {
-                NSLog(@"Step 3c: Read the global attribute: FeatureMap when CNET.S.F01 is set: Success");
+                NSLog(@"Step 3c: TH reads the global attribute: FeatureMap when CNET.S.F01 is set: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46199,7 +46695,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3dReadTheGlobalAttributeFeatureMapWhenCnetsf02IsSet_5()
+    CHIP_ERROR TestStep3dThReadsTheGlobalAttributeFeatureMapWhenCnetsf02IsSet_5()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46208,9 +46704,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3d: Read the global attribute: FeatureMap when CNET.S.F02 is set: Error: %@", err);
+                NSLog(@"Step 3d: TH reads the global attribute: FeatureMap when CNET.S.F02 is set: Error: %@", err);
             } else {
-                NSLog(@"Step 3d: Read the global attribute: FeatureMap when CNET.S.F02 is set: Success");
+                NSLog(@"Step 3d: TH reads the global attribute: FeatureMap when CNET.S.F02 is set: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46226,7 +46722,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4aReadTheGlobalAttributeAttributeList_6()
+    CHIP_ERROR TestStep4aThReadsFromTheDutTheAttributeListAttribute_6()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46235,9 +46731,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4a: TH reads from the DUT the AttributeList attribute: Error: %@", err);
             } else {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Success");
+                NSLog(@"Step 4a: TH reads from the DUT the AttributeList attribute: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46256,7 +46752,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4aReadTheGlobalAttributeAttributeList_7()
+    CHIP_ERROR TestStep4bThReadsFromTheDutTheAttributeListAttribute_7()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46265,9 +46761,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4b: TH reads from the DUT the AttributeList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Success");
+                NSLog(@"Step 4b: TH reads from the DUT the AttributeList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46285,7 +46781,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4bReadMandatoryAttributesInAttributeListIfCnetsf00wiCnetsf01thCnetsf02etIsTrue_8()
+    CHIP_ERROR TestStep4cThReadsMandatoryAttributesInAttributeListIfCnetsf00wiCnetsf01thCnetsf02etIsTrue_8()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46294,9 +46790,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4b: Read mandatory attributes in AttributeList if CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) is true: Error: %@", err);
+                NSLog(@"Step 4c: TH reads mandatory attributes in AttributeList if CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) is true: Error: %@", err);
             } else {
-                NSLog(@"Step 4b: Read mandatory attributes in AttributeList if CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) is true: Success");
+                NSLog(@"Step 4c: TH reads mandatory attributes in AttributeList if CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) is true: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46315,7 +46811,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4cReadTheOptionalAttributeScanMaxTimeSecondsAttributeList_9()
+    CHIP_ERROR TestStep4dThReadsTheFeatureDependentAttributeScanMaxTimeSecondsAttributeList_9()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46324,9 +46820,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4c: Read the optional attribute(ScanMaxTimeSeconds): AttributeList: Error: %@", err);
+                NSLog(@"Step 4d: TH reads the feature dependent attribute(ScanMaxTimeSeconds): AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4c: Read the optional attribute(ScanMaxTimeSeconds): AttributeList: Success");
+                NSLog(@"Step 4d: TH reads the feature dependent attribute(ScanMaxTimeSeconds): AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46340,7 +46836,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4dReadingOptionalAttributeConnectMaxTimeSecondsInAttributeList_10()
+    CHIP_ERROR TestStep4eThReadsTheFeatureDependentAttributeConnectMaxTimeSecondsInAttributeList_10()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46349,9 +46845,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4d: Reading optional attribute(ConnectMaxTimeSeconds) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4e: TH reads the feature dependent attribute(ConnectMaxTimeSeconds) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4d: Reading optional attribute(ConnectMaxTimeSeconds) in AttributeList: Success");
+                NSLog(@"Step 4e: TH reads the feature dependent attribute(ConnectMaxTimeSeconds) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46365,7 +46861,58 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6aReadAcceptedCommandListIfDutSupportsWiFiThreadRelatedFeaturesCnetsf00wicnetsf01th_12()
+    CHIP_ERROR TestStep4fThReadsWifiRelatedAttributeSupportedWiFiBandsInAttributeList_11()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 4f: TH reads WIFI related attribute (SupportedWiFiBands) in AttributeList: Error: %@", err);
+            } else {
+                NSLog(@"Step 4f: TH reads WIFI related attribute (SupportedWiFiBands) in AttributeList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("attributeList", value, 8UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep4gThReadsThreadRelatedAttributeSupportedWiFiBandsAndThreadVersionInAttributeList_12()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 4g: TH reads Thread related attribute (SupportedWiFiBands and ThreadVersion) in AttributeList: Error: %@", err);
+            } else {
+                NSLog(@"Step 4g: TH reads Thread related attribute (SupportedWiFiBands and ThreadVersion) in AttributeList: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+            VerifyOrReturn(CheckConstraintContains("attributeList", value, 9UL));
+            VerifyOrReturn(CheckConstraintContains("attributeList", value, 10UL));
+
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep6aThReadsAcceptedCommandListAttributeFromDutIfDutSupportsWiFiThreadRelatedFeaturesCnetsf00wicnetsf01th_14()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46374,9 +46921,9 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 6a: Read AcceptedCommandList If DUT supports Wi-Fi/Thread related features CNET.S.F00(WI),CNET.S.F01(TH): Error: %@", err);
+                NSLog(@"Step 6a: TH reads AcceptedCommandList attribute from DUT. If DUT supports Wi-Fi/Thread related features CNET.S.F00(WI),CNET.S.F01(TH): Error: %@", err);
             } else {
-                NSLog(@"Step 6a: Read AcceptedCommandList If DUT supports Wi-Fi/Thread related features CNET.S.F00(WI),CNET.S.F01(TH): Success");
+                NSLog(@"Step 6a: TH reads AcceptedCommandList attribute from DUT. If DUT supports Wi-Fi/Thread related features CNET.S.F00(WI),CNET.S.F01(TH): Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46393,7 +46940,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6bReadAcceptedCommandListIfDutSupportsWiFiRelatedFeaturesCnetsf00wiIsTrue_13()
+    CHIP_ERROR TestStep6bThReadsAcceptedCommandListAttributeFromDutIfDutSupportsWiFiRelatedFeaturesCnetsf00wiIsTrue_15()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46402,9 +46949,9 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 6b: Read AcceptedCommandList If DUT supports Wi-Fi related features (CNET.S.F00(WI) is true): Error: %@", err);
+                NSLog(@"Step 6b: TH reads AcceptedCommandList attribute from DUT. If DUT supports Wi-Fi related features (CNET.S.F00(WI) is true): Error: %@", err);
             } else {
-                NSLog(@"Step 6b: Read AcceptedCommandList If DUT supports Wi-Fi related features (CNET.S.F00(WI) is true): Success");
+                NSLog(@"Step 6b: TH reads AcceptedCommandList attribute from DUT. If DUT supports Wi-Fi related features (CNET.S.F00(WI) is true): Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46418,7 +46965,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6cReadAcceptedCommandListIfDutSupportsThreadRelatedFeaturesCNETSF01THIsTrue_14()
+    CHIP_ERROR TestStep6cThReadsAcceptedCommandListAttributeFromDutIfDutSupportsThreadRelatedFeaturesCNETSF01THIsTrue_16()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46427,9 +46974,9 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 6c: Read AcceptedCommandList If DUT supports Thread related features(CNET.S.F01(TH) is true): Error: %@", err);
+                NSLog(@"Step 6c: TH reads AcceptedCommandList attribute from DUT. If DUT supports Thread related features(CNET.S.F01(TH) is true): Error: %@", err);
             } else {
-                NSLog(@"Step 6c: Read AcceptedCommandList If DUT supports Thread related features(CNET.S.F01(TH) is true): Success");
+                NSLog(@"Step 6c: TH reads AcceptedCommandList attribute from DUT. If DUT supports Thread related features(CNET.S.F01(TH) is true): Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46443,7 +46990,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6dReadAcceptedCommandListIfDutSupportsEthernetRelatedFeaturesCNETSF02THIsTrue_15()
+    CHIP_ERROR TestStep6dThReadsAcceptedCommandListAttributeFromDutIfDutSupportsEthernetRelatedFeaturesCNETSF02THIsTrue_17()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46452,9 +46999,9 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 6d: Read AcceptedCommandList If DUT supports Ethernet related features(CNET.S.F02(TH) is true): Error: %@", err);
+                NSLog(@"Step 6d: TH reads AcceptedCommandList attribute from DUT. If DUT supports Ethernet related features(CNET.S.F02(TH) is true): Error: %@", err);
             } else {
-                NSLog(@"Step 6d: Read AcceptedCommandList If DUT supports Ethernet related features(CNET.S.F02(TH) is true): Success");
+                NSLog(@"Step 6d: TH reads AcceptedCommandList attribute from DUT. If DUT supports Ethernet related features(CNET.S.F02(TH) is true): Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46470,7 +47017,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep7aReadTheGeneratedCommandListIfDutSupportsWiFiThreadRelatedFeaturesCNETSF00WIOrCnetsf01thIsTrue_16()
+    CHIP_ERROR TestStep7aThReadsTheGeneratedCommandListAttributeFromDutIfDutSupportsWiFiThreadRelatedFeaturesCNETSF00WIOrCnetsf01thIsTrue_18()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46479,9 +47026,9 @@
 
         [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 7a: Read the GeneratedCommandList If DUT supports Wi-Fi/Thread related features(CNET.S.F00(WI) or CNET.S.F01(TH) is true): Error: %@", err);
+                NSLog(@"Step 7a: TH reads the GeneratedCommandList attribute from DUT. If DUT supports Wi-Fi/Thread related features(CNET.S.F00(WI) or CNET.S.F01(TH) is true): Error: %@", err);
             } else {
-                NSLog(@"Step 7a: Read the GeneratedCommandList If DUT supports Wi-Fi/Thread related features(CNET.S.F00(WI) or CNET.S.F01(TH) is true): Success");
+                NSLog(@"Step 7a: TH reads the GeneratedCommandList attribute from DUT. If DUT supports Wi-Fi/Thread related features(CNET.S.F00(WI) or CNET.S.F01(TH) is true): Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -46497,7 +47044,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep7bReadTheGeneratedCommandListIfDutSupportsEthernetRelatedFeaturesCNETSF02ETMustBeTrue_17()
+    CHIP_ERROR TestStep7bReadTheGeneratedCommandListAttributeFromDutIfDutSupportsEthernetRelatedFeaturesCNETSF02ETMustBeTrue_19()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -46506,9 +47053,9 @@
 
         [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 7b: Read the GeneratedCommandList If DUT supports Ethernet related features(CNET.S.F02(ET) must be true): Error: %@", err);
+                NSLog(@"Step 7b: Read the GeneratedCommandList attribute from DUT. If DUT supports Ethernet related features(CNET.S.F02(ET) must be true): Error: %@", err);
             } else {
-                NSLog(@"Step 7b: Read the GeneratedCommandList If DUT supports Ethernet related features(CNET.S.F02(ET) must be true): Success");
+                NSLog(@"Step 7b: Read the GeneratedCommandList attribute from DUT. If DUT supports Ethernet related features(CNET.S.F02(ET) must be true): Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -52469,75 +53016,79 @@
             err = TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0();
             break;
         case 1:
-            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Read the global attribute: ClusterRevision\n");
-            err = TestStep2ReadTheGlobalAttributeClusterRevision_1();
+            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads from the DUT the ClusterRevision attribute.\n");
+            err = TestStep2ThReadsFromTheDutTheClusterRevisionAttribute_1();
             break;
         case 2:
-            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: Read the global attribute: FeatureMap\n");
-            err = TestStep3ReadTheGlobalAttributeFeatureMap_2();
+            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3: TH reads from the DUT the FeatureMap attribute.\n");
+            err = TestStep3ThReadsFromTheDutTheFeatureMapAttribute_2();
             break;
         case 3:
-            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: Read the global attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: TH reads from the DUT the AttributeList attribute.\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep4aReadTheGlobalAttributeAttributeList_3();
+            err = TestStep4aThReadsFromTheDutTheAttributeListAttribute_3();
             break;
         case 4:
-            ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: Read the global attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4a: TH reads from the DUT the AttributeList attribute.\n");
             if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep4aReadTheGlobalAttributeAttributeList_4();
+            err = TestStep4aThReadsFromTheDutTheAttributeListAttribute_4();
             break;
         case 5:
             ChipLogProgress(chipTool, " ***** Test Step 5 : Step 4b: Validate presence of mandatory attribute(UpTime) in AttributeList\n");
+            if (ShouldSkip("DGGEN.S.A0002")) {
+                NextTest();
+                return;
+            }
             err = TestStep4bValidatePresenceOfMandatoryAttributeUpTimeInAttributeList_5();
             break;
         case 6:
-            ChipLogProgress(chipTool, " ***** Test Step 6 : Step 4c: Read optional attribute(TotalOperationalHours) in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 6 : Step 4c: TH reads optional attribute(TotalOperationalHours) in AttributeList\n");
             if (ShouldSkip("DGGEN.S.A0003")) {
                 NextTest();
                 return;
             }
-            err = TestStep4cReadOptionalAttributeTotalOperationalHoursInAttributeList_6();
+            err = TestStep4cThReadsOptionalAttributeTotalOperationalHoursInAttributeList_6();
             break;
         case 7:
-            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4d: Read optional attribute(BootReason) in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4d: TH reads optional attribute(BootReason) in AttributeList\n");
             if (ShouldSkip("DGGEN.S.A0004")) {
                 NextTest();
                 return;
             }
-            err = TestStep4dReadOptionalAttributeBootReasonInAttributeList_7();
+            err = TestStep4dThReadsOptionalAttributeBootReasonInAttributeList_7();
             break;
         case 8:
-            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4e: Read optional attribute(ActiveHardwareFaults) in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4e: TH reads optional attribute(ActiveHardwareFaults) in AttributeList\n");
             if (ShouldSkip("DGGEN.S.A0005")) {
                 NextTest();
                 return;
             }
-            err = TestStep4eReadOptionalAttributeActiveHardwareFaultsInAttributeList_8();
+            err = TestStep4eThReadsOptionalAttributeActiveHardwareFaultsInAttributeList_8();
             break;
         case 9:
-            ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4f: Read optional attribute(ActiveRadioFaults) in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4f: TH reads optional attribute(ActiveRadioFaults) in AttributeList\n");
             if (ShouldSkip("DGGEN.S.A0006")) {
                 NextTest();
                 return;
             }
-            err = TestStep4fReadOptionalAttributeActiveRadioFaultsInAttributeList_9();
+            err = TestStep4fThReadsOptionalAttributeActiveRadioFaultsInAttributeList_9();
             break;
         case 10:
-            ChipLogProgress(chipTool, " ***** Test Step 10 : Step 4g: Read optional attribute(ActiveNetworkFaults) in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 10 : Step 4g: TH reads optional attribute(ActiveNetworkFaults) in AttributeList\n");
             if (ShouldSkip("DGGEN.S.A0007")) {
                 NextTest();
                 return;
             }
-            err = TestStep4gReadOptionalAttributeActiveNetworkFaultsInAttributeList_10();
+            err = TestStep4gThReadsOptionalAttributeActiveNetworkFaultsInAttributeList_10();
             break;
         case 11:
-            ChipLogProgress(chipTool, " ***** Test Step 11 : Step 5a: Read the global attribute: EventList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 11 : Step 5a: TH reads from the DUT the EventList attribute\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
@@ -52545,7 +53096,7 @@
             NextTest();
             return;
         case 12:
-            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 5b: Read optional event(HardwareFaultChange) in EventList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 5b: TH reads optional event(HardwareFaultChange) in EventList\n");
             if (ShouldSkip("DGGEN.S.E00 && PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
@@ -52553,7 +53104,7 @@
             NextTest();
             return;
         case 13:
-            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 5c: Read optional event(RadioFaultChange) in EventList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 5c: TH reads optional event(RadioFaultChange) in EventList\n");
             if (ShouldSkip("DGGEN.S.E01 && PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
@@ -52561,7 +53112,7 @@
             NextTest();
             return;
         case 14:
-            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 5d: Read optional event(NetworkFaultChange) in EventList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 5d: TH reads optional event(NetworkFaultChange) in EventList\n");
             if (ShouldSkip("DGGEN.S.E02 && PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
@@ -52569,12 +53120,12 @@
             NextTest();
             return;
         case 15:
-            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 6: Read the global attribute: AcceptedCommandList\n");
-            err = TestStep6ReadTheGlobalAttributeAcceptedCommandList_15();
+            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 6: TH reads from the DUT the AcceptedCommandList attribute\n");
+            err = TestStep6ThReadsFromTheDutTheAcceptedCommandListAttribute_15();
             break;
         case 16:
-            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 7: TH reads GeneratedCommandList from DUT\n");
-            err = TestStep7ThReadsGeneratedCommandListFromDut_16();
+            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 7: TH reads from the DUT the GeneratedCommandList attribute\n");
+            err = TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_16();
             break;
         }
 
@@ -52663,7 +53214,7 @@
         return WaitForCommissionee("alpha", value);
     }
 
-    CHIP_ERROR TestStep2ReadTheGlobalAttributeClusterRevision_1()
+    CHIP_ERROR TestStep2ThReadsFromTheDutTheClusterRevisionAttribute_1()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -52672,9 +53223,9 @@
 
         [cluster readAttributeClusterRevisionWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 2: Read the global attribute: ClusterRevision: Error: %@", err);
+                NSLog(@"Step 2: TH reads from the DUT the ClusterRevision attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 2: Read the global attribute: ClusterRevision: Success");
+                NSLog(@"Step 2: TH reads from the DUT the ClusterRevision attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -52691,7 +53242,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3ReadTheGlobalAttributeFeatureMap_2()
+    CHIP_ERROR TestStep3ThReadsFromTheDutTheFeatureMapAttribute_2()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -52700,9 +53251,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3: Read the global attribute: FeatureMap: Error: %@", err);
+                NSLog(@"Step 3: TH reads from the DUT the FeatureMap attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 3: Read the global attribute: FeatureMap: Success");
+                NSLog(@"Step 3: TH reads from the DUT the FeatureMap attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -52719,7 +53270,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4aReadTheGlobalAttributeAttributeList_3()
+    CHIP_ERROR TestStep4aThReadsFromTheDutTheAttributeListAttribute_3()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -52728,9 +53279,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4a: TH reads from the DUT the AttributeList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Success");
+                NSLog(@"Step 4a: TH reads from the DUT the AttributeList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -52752,7 +53303,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4aReadTheGlobalAttributeAttributeList_4()
+    CHIP_ERROR TestStep4aThReadsFromTheDutTheAttributeListAttribute_4()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -52761,9 +53312,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4a: TH reads from the DUT the AttributeList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Success");
+                NSLog(@"Step 4a: TH reads from the DUT the AttributeList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -52809,7 +53360,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4cReadOptionalAttributeTotalOperationalHoursInAttributeList_6()
+    CHIP_ERROR TestStep4cThReadsOptionalAttributeTotalOperationalHoursInAttributeList_6()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -52818,9 +53369,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4c: Read optional attribute(TotalOperationalHours) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4c: TH reads optional attribute(TotalOperationalHours) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4c: Read optional attribute(TotalOperationalHours) in AttributeList: Success");
+                NSLog(@"Step 4c: TH reads optional attribute(TotalOperationalHours) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -52834,7 +53385,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4dReadOptionalAttributeBootReasonInAttributeList_7()
+    CHIP_ERROR TestStep4dThReadsOptionalAttributeBootReasonInAttributeList_7()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -52843,9 +53394,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4d: Read optional attribute(BootReason) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4d: TH reads optional attribute(BootReason) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4d: Read optional attribute(BootReason) in AttributeList: Success");
+                NSLog(@"Step 4d: TH reads optional attribute(BootReason) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -52859,7 +53410,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4eReadOptionalAttributeActiveHardwareFaultsInAttributeList_8()
+    CHIP_ERROR TestStep4eThReadsOptionalAttributeActiveHardwareFaultsInAttributeList_8()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -52868,9 +53419,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4e: Read optional attribute(ActiveHardwareFaults) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4e: TH reads optional attribute(ActiveHardwareFaults) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4e: Read optional attribute(ActiveHardwareFaults) in AttributeList: Success");
+                NSLog(@"Step 4e: TH reads optional attribute(ActiveHardwareFaults) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -52884,7 +53435,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4fReadOptionalAttributeActiveRadioFaultsInAttributeList_9()
+    CHIP_ERROR TestStep4fThReadsOptionalAttributeActiveRadioFaultsInAttributeList_9()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -52893,9 +53444,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4f: Read optional attribute(ActiveRadioFaults) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4f: TH reads optional attribute(ActiveRadioFaults) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4f: Read optional attribute(ActiveRadioFaults) in AttributeList: Success");
+                NSLog(@"Step 4f: TH reads optional attribute(ActiveRadioFaults) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -52909,7 +53460,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4gReadOptionalAttributeActiveNetworkFaultsInAttributeList_10()
+    CHIP_ERROR TestStep4gThReadsOptionalAttributeActiveNetworkFaultsInAttributeList_10()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -52918,9 +53469,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4g: Read optional attribute(ActiveNetworkFaults) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4g: TH reads optional attribute(ActiveNetworkFaults) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4g: Read optional attribute(ActiveNetworkFaults) in AttributeList: Success");
+                NSLog(@"Step 4g: TH reads optional attribute(ActiveNetworkFaults) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -52934,7 +53485,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6ReadTheGlobalAttributeAcceptedCommandList_15()
+    CHIP_ERROR TestStep6ThReadsFromTheDutTheAcceptedCommandListAttribute_15()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -52943,9 +53494,9 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 6: Read the global attribute: AcceptedCommandList: Error: %@", err);
+                NSLog(@"Step 6: TH reads from the DUT the AcceptedCommandList attribute: Error: %@", err);
             } else {
-                NSLog(@"Step 6: Read the global attribute: AcceptedCommandList: Success");
+                NSLog(@"Step 6: TH reads from the DUT the AcceptedCommandList attribute: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -52960,7 +53511,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep7ThReadsGeneratedCommandListFromDut_16()
+    CHIP_ERROR TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_16()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -52969,9 +53520,9 @@
 
         [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 7: TH reads GeneratedCommandList from DUT: Error: %@", err);
+                NSLog(@"Step 7: TH reads from the DUT the GeneratedCommandList attribute: Error: %@", err);
             } else {
-                NSLog(@"Step 7: TH reads GeneratedCommandList from DUT: Success");
+                NSLog(@"Step 7: TH reads from the DUT the GeneratedCommandList attribute: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -56766,11 +57317,11 @@
         // incorrect mTestIndex value observed when we get the response.
         switch (mTestIndex++) {
         case 0:
-            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: Wait for the commissioned device to be retrieved\n");
-            err = TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0();
+            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: Commission DUT to TH (can be skipped if done in a preceding test).\n");
+            err = TestStep1CommissionDutToThCanBeSkippedIfDoneInAPrecedingTest_0();
             break;
         case 1:
-            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2a: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x00 blink and the effect variant field set to 0x00 default\n");
+            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2a: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x00 (blink) and the effect variant field set to 0x00 (default)\n");
             if (ShouldSkip("I.S.C40.Rsp")) {
                 NextTest();
                 return;
@@ -56786,7 +57337,7 @@
             err = TestDutExecutesABlinkEffect_2();
             break;
         case 3:
-            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 2b: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x01 breathe and the effect variant field set to 0x00 default\n");
+            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 2b: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x01 (breathe) and the effect variant field set to 0x00 (default).\n");
             if (ShouldSkip("I.S.C40.Rsp")) {
                 NextTest();
                 return;
@@ -56802,7 +57353,7 @@
             err = TestDutExecutesABreatheEffect_4();
             break;
         case 5:
-            ChipLogProgress(chipTool, " ***** Test Step 5 : Step 2c: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x02 okay and the effect variant field set to 0x00 default\n");
+            ChipLogProgress(chipTool, " ***** Test Step 5 : Step 2c: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x02 (okay) and the effect variant field set to 0x00 (default).\n");
             if (ShouldSkip("I.S.C40.Rsp")) {
                 NextTest();
                 return;
@@ -56818,12 +57369,12 @@
             err = TestDutExecutesAnOkayEffect_6();
             break;
         case 7:
-            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 2d: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x0b channel change and the effect variant field set to 0x00 default\n");
+            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 2d:TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x0b (channel change) and the effect variant field set to 0x00 (default).\n");
             if (ShouldSkip("I.S.C40.Rsp")) {
                 NextTest();
                 return;
             }
-            err = TestStep2dThSendsTriggerEffectCommandToDutWithTheEffectIdentifierFieldSetTo0x0bChannelChangeAndTheEffectVariantFieldSetTo0x00Default_7();
+            err = TestStep2dTHSendsTriggerEffectCommandToDutWithTheEffectIdentifierFieldSetTo0x0bChannelChangeAndTheEffectVariantFieldSetTo0x00Default_7();
             break;
         case 8:
             ChipLogProgress(chipTool, " ***** Test Step 8 : DUT executes a channel change effect\n");
@@ -56834,7 +57385,7 @@
             err = TestDutExecutesAChannelChangeEffect_8();
             break;
         case 9:
-            ChipLogProgress(chipTool, " ***** Test Step 9 : Step 2e: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x01 breathe and the effect variant field set to 0x00 default\n");
+            ChipLogProgress(chipTool, " ***** Test Step 9 : Step 2e: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x01 (breathe) and the effect variant field set to 0x00 (default).\n");
             if (ShouldSkip("I.S.C40.Rsp")) {
                 NextTest();
                 return;
@@ -56850,7 +57401,7 @@
             err = TestDutExecutesABreatheEffect_10();
             break;
         case 11:
-            ChipLogProgress(chipTool, " ***** Test Step 11 : Step 2f: TH sends TriggerEffect command to DUT with the effect identifier field set to 0xfe finish effect and the effect variant field set to 0x00 default\n");
+            ChipLogProgress(chipTool, " ***** Test Step 11 : Step 2f: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0xfe (finish effect) and the effect variant field set to 0x00 (default).\n");
             if (ShouldSkip("I.S.C40.Rsp")) {
                 NextTest();
                 return;
@@ -56866,7 +57417,7 @@
             err = TestDutStopsTheBreatheEffectAfterTheCurrentEffectSequence_12();
             break;
         case 13:
-            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 2g: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x01 breathe and the effect variant field set to 0x00 default\n");
+            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 2g: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x01 (breathe) and the effect variant field set to 0x00 (default).\n");
             if (ShouldSkip("I.S.C40.Rsp")) {
                 NextTest();
                 return;
@@ -56882,7 +57433,7 @@
             err = TestDutExecutesABreatheEffect_14();
             break;
         case 15:
-            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 2h: TH sends TriggerEffect command to DUT with the effect identifier field set to 0xff stop effect and the effect variant field set to 0x00 default\n");
+            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 2h: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0xff (stop effect) and the effect variant field set to 0x00 (default).\n");
             if (ShouldSkip("I.S.C40.Rsp")) {
                 NextTest();
                 return;
@@ -56898,7 +57449,7 @@
             err = TestDutStopsTheBreatheEffectAsSoonAsPossible_16();
             break;
         case 17:
-            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 3a: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x00 blink and the effect variant field set to 0x42 unknown\n");
+            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 3a: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x00 (blink) and the effect variant field set to 0x42 (unknown).\n");
             if (ShouldSkip("I.S.C40.Rsp")) {
                 NextTest();
                 return;
@@ -56914,7 +57465,7 @@
             err = TestCheckDutExecutesABlinkEffect_18();
             break;
         case 19:
-            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 3b: TH sends TriggerEffect command to DUT with the effect identifier field set to 0xff stop effect and the effect variant field set to 0x00 default\n");
+            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 3b: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0xff (stop effect) and the effect variant field set to 0x00 (default).\n");
             if (ShouldSkip("I.S.C40.Rsp")) {
                 NextTest();
                 return;
@@ -57020,7 +57571,7 @@
     chip::Optional<chip::EndpointId> mEndpoint;
     chip::Optional<uint16_t> mTimeout;
 
-    CHIP_ERROR TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0()
+    CHIP_ERROR TestStep1CommissionDutToThCanBeSkippedIfDoneInAPrecedingTest_0()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
@@ -57043,9 +57594,9 @@
         [cluster triggerEffectWithParams:params completion:
                                                     ^(NSError * _Nullable err) {
                                                         if (err != nil) {
-                                                            NSLog(@"Step 2a: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x00 blink and the effect variant field set to 0x00 default: Error: %@", err);
+                                                            NSLog(@"Step 2a: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x00 (blink) and the effect variant field set to 0x00 (default): Error: %@", err);
                                                         } else {
-                                                            NSLog(@"Step 2a: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x00 blink and the effect variant field set to 0x00 default: Success");
+                                                            NSLog(@"Step 2a: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x00 (blink) and the effect variant field set to 0x00 (default): Success");
                                                         }
 
                                                         VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -57081,9 +57632,9 @@
         [cluster triggerEffectWithParams:params completion:
                                                     ^(NSError * _Nullable err) {
                                                         if (err != nil) {
-                                                            NSLog(@"Step 2b: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x01 breathe and the effect variant field set to 0x00 default: Error: %@", err);
+                                                            NSLog(@"Step 2b: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x01 (breathe) and the effect variant field set to 0x00 (default).: Error: %@", err);
                                                         } else {
-                                                            NSLog(@"Step 2b: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x01 breathe and the effect variant field set to 0x00 default: Success");
+                                                            NSLog(@"Step 2b: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x01 (breathe) and the effect variant field set to 0x00 (default).: Success");
                                                         }
 
                                                         VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -57119,9 +57670,9 @@
         [cluster triggerEffectWithParams:params completion:
                                                     ^(NSError * _Nullable err) {
                                                         if (err != nil) {
-                                                            NSLog(@"Step 2c: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x02 okay and the effect variant field set to 0x00 default: Error: %@", err);
+                                                            NSLog(@"Step 2c: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x02 (okay) and the effect variant field set to 0x00 (default).: Error: %@", err);
                                                         } else {
-                                                            NSLog(@"Step 2c: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x02 okay and the effect variant field set to 0x00 default: Success");
+                                                            NSLog(@"Step 2c: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x02 (okay) and the effect variant field set to 0x00 (default).: Success");
                                                         }
 
                                                         VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -57142,7 +57693,7 @@
         return UserPrompt("alpha", value);
     }
 
-    CHIP_ERROR TestStep2dThSendsTriggerEffectCommandToDutWithTheEffectIdentifierFieldSetTo0x0bChannelChangeAndTheEffectVariantFieldSetTo0x00Default_7()
+    CHIP_ERROR TestStep2dTHSendsTriggerEffectCommandToDutWithTheEffectIdentifierFieldSetTo0x0bChannelChangeAndTheEffectVariantFieldSetTo0x00Default_7()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -57157,9 +57708,9 @@
         [cluster triggerEffectWithParams:params completion:
                                                     ^(NSError * _Nullable err) {
                                                         if (err != nil) {
-                                                            NSLog(@"Step 2d: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x0b channel change and the effect variant field set to 0x00 default: Error: %@", err);
+                                                            NSLog(@"Step 2d:TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x0b (channel change) and the effect variant field set to 0x00 (default).: Error: %@", err);
                                                         } else {
-                                                            NSLog(@"Step 2d: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x0b channel change and the effect variant field set to 0x00 default: Success");
+                                                            NSLog(@"Step 2d:TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x0b (channel change) and the effect variant field set to 0x00 (default).: Success");
                                                         }
 
                                                         VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -57195,9 +57746,9 @@
         [cluster triggerEffectWithParams:params completion:
                                                     ^(NSError * _Nullable err) {
                                                         if (err != nil) {
-                                                            NSLog(@"Step 2e: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x01 breathe and the effect variant field set to 0x00 default: Error: %@", err);
+                                                            NSLog(@"Step 2e: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x01 (breathe) and the effect variant field set to 0x00 (default).: Error: %@", err);
                                                         } else {
-                                                            NSLog(@"Step 2e: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x01 breathe and the effect variant field set to 0x00 default: Success");
+                                                            NSLog(@"Step 2e: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x01 (breathe) and the effect variant field set to 0x00 (default).: Success");
                                                         }
 
                                                         VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -57233,9 +57784,9 @@
         [cluster triggerEffectWithParams:params completion:
                                                     ^(NSError * _Nullable err) {
                                                         if (err != nil) {
-                                                            NSLog(@"Step 2f: TH sends TriggerEffect command to DUT with the effect identifier field set to 0xfe finish effect and the effect variant field set to 0x00 default: Error: %@", err);
+                                                            NSLog(@"Step 2f: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0xfe (finish effect) and the effect variant field set to 0x00 (default).: Error: %@", err);
                                                         } else {
-                                                            NSLog(@"Step 2f: TH sends TriggerEffect command to DUT with the effect identifier field set to 0xfe finish effect and the effect variant field set to 0x00 default: Success");
+                                                            NSLog(@"Step 2f: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0xfe (finish effect) and the effect variant field set to 0x00 (default).: Success");
                                                         }
 
                                                         VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -57271,9 +57822,9 @@
         [cluster triggerEffectWithParams:params completion:
                                                     ^(NSError * _Nullable err) {
                                                         if (err != nil) {
-                                                            NSLog(@"Step 2g: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x01 breathe and the effect variant field set to 0x00 default: Error: %@", err);
+                                                            NSLog(@"Step 2g: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x01 (breathe) and the effect variant field set to 0x00 (default).: Error: %@", err);
                                                         } else {
-                                                            NSLog(@"Step 2g: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x01 breathe and the effect variant field set to 0x00 default: Success");
+                                                            NSLog(@"Step 2g: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x01 (breathe) and the effect variant field set to 0x00 (default).: Success");
                                                         }
 
                                                         VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -57309,9 +57860,9 @@
         [cluster triggerEffectWithParams:params completion:
                                                     ^(NSError * _Nullable err) {
                                                         if (err != nil) {
-                                                            NSLog(@"Step 2h: TH sends TriggerEffect command to DUT with the effect identifier field set to 0xff stop effect and the effect variant field set to 0x00 default: Error: %@", err);
+                                                            NSLog(@"Step 2h: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0xff (stop effect) and the effect variant field set to 0x00 (default).: Error: %@", err);
                                                         } else {
-                                                            NSLog(@"Step 2h: TH sends TriggerEffect command to DUT with the effect identifier field set to 0xff stop effect and the effect variant field set to 0x00 default: Success");
+                                                            NSLog(@"Step 2h: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0xff (stop effect) and the effect variant field set to 0x00 (default).: Success");
                                                         }
 
                                                         VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -57347,9 +57898,9 @@
         [cluster triggerEffectWithParams:params completion:
                                                     ^(NSError * _Nullable err) {
                                                         if (err != nil) {
-                                                            NSLog(@"Step 3a: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x00 blink and the effect variant field set to 0x42 unknown: Error: %@", err);
+                                                            NSLog(@"Step 3a: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x00 (blink) and the effect variant field set to 0x42 (unknown).: Error: %@", err);
                                                         } else {
-                                                            NSLog(@"Step 3a: TH sends TriggerEffect command to DUT with the effect identifier field set to 0x00 blink and the effect variant field set to 0x42 unknown: Success");
+                                                            NSLog(@"Step 3a: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0x00 (blink) and the effect variant field set to 0x42 (unknown).: Success");
                                                         }
 
                                                         VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -57385,9 +57936,9 @@
         [cluster triggerEffectWithParams:params completion:
                                                     ^(NSError * _Nullable err) {
                                                         if (err != nil) {
-                                                            NSLog(@"Step 3b: TH sends TriggerEffect command to DUT with the effect identifier field set to 0xff stop effect and the effect variant field set to 0x00 default: Error: %@", err);
+                                                            NSLog(@"Step 3b: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0xff (stop effect) and the effect variant field set to 0x00 (default).: Error: %@", err);
                                                         } else {
-                                                            NSLog(@"Step 3b: TH sends TriggerEffect command to DUT with the effect identifier field set to 0xff stop effect and the effect variant field set to 0x00 default: Success");
+                                                            NSLog(@"Step 3b: TH sends TriggerEffect command to DUT, with the effect identifier field set to 0xff (stop effect) and the effect variant field set to 0x00 (default).: Success");
                                                         }
 
                                                         VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -58443,149 +58994,149 @@
         // incorrect mTestIndex value observed when we get the response.
         switch (mTestIndex++) {
         case 0:
-            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 0: Wait for the commissioned device to be retrieved\n");
-            err = TestStep0WaitForTheCommissionedDeviceToBeRetrieved_0();
+            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: Commission DUT to TH (can be skipped if done in a preceding test).\n");
+            err = TestStep1CommissionDutToThCanBeSkippedIfDoneInAPrecedingTest_0();
             break;
         case 1:
-            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 1: Read the global attribute: ClusterRevision\n");
-            err = TestStep1ReadTheGlobalAttributeClusterRevision_1();
+            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads from the DUT the ClusterRevision attribute.\n");
+            err = TestStep2ThReadsFromTheDutTheClusterRevisionAttribute_1();
             break;
         case 2:
-            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 2a: Read the global attribute: FeatureMap\n");
+            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3a: TH reads from the DUT the FeatureMap attribute.\n");
             if (ShouldSkip(" !LVL.S.F00 && !LVL.S.F01 && !LVL.S.F02 ")) {
                 NextTest();
                 return;
             }
-            err = TestStep2aReadTheGlobalAttributeFeatureMap_2();
+            err = TestStep3aThReadsFromTheDutTheFeatureMapAttribute_2();
             break;
         case 3:
-            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 2b: Given LVL.S.F00(OO) ensure featuremap has the correct bit set\n");
+            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 3b: Given LVL.S.F00(OO) ensure featuremap has the correct bit set\n");
             if (ShouldSkip("LVL.S.F00")) {
                 NextTest();
                 return;
             }
-            err = TestStep2bGivenLvlsf00ooEnsureFeaturemapHasTheCorrectBitSet_3();
+            err = TestStep3bGivenLvlsf00ooEnsureFeaturemapHasTheCorrectBitSet_3();
             break;
         case 4:
-            ChipLogProgress(chipTool, " ***** Test Step 4 : Step 2c: Given LVL.S.F01(LT) ensure featuremap has the correct bit set\n");
+            ChipLogProgress(chipTool, " ***** Test Step 4 : Step 3c: Given LVL.S.F01(LT) ensure featuremap has the correct bit set\n");
             if (ShouldSkip("LVL.S.F01")) {
                 NextTest();
                 return;
             }
-            err = TestStep2cGivenLvlsf01ltEnsureFeaturemapHasTheCorrectBitSet_4();
+            err = TestStep3cGivenLvlsf01ltEnsureFeaturemapHasTheCorrectBitSet_4();
             break;
         case 5:
-            ChipLogProgress(chipTool, " ***** Test Step 5 : Step 2d: Given LVL.S.F02(FQ) ensure featuremap has the correct bit set\n");
+            ChipLogProgress(chipTool, " ***** Test Step 5 : Step 3d: Given LVL.S.F02(FQ) ensure featuremap has the correct bit set\n");
             if (ShouldSkip("LVL.S.F02")) {
                 NextTest();
                 return;
             }
-            err = TestStep2dGivenLvlsf02fqEnsureFeaturemapHasTheCorrectBitSet_5();
+            err = TestStep3dGivenLvlsf02fqEnsureFeaturemapHasTheCorrectBitSet_5();
             break;
         case 6:
-            ChipLogProgress(chipTool, " ***** Test Step 6 : Step 3a: Read the global attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 6 : Step 4: TH reads from the DUT the AttributeList attribute.\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep3aReadTheGlobalAttributeAttributeList_6();
+            err = TestStep4ThReadsFromTheDutTheAttributeListAttribute_6();
             break;
         case 7:
-            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 3a: Read the global attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4: TH reads from the DUT the AttributeList attribute.\n");
             if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep3aReadTheGlobalAttributeAttributeList_7();
+            err = TestStep4ThReadsFromTheDutTheAttributeListAttribute_7();
             break;
         case 8:
-            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 3b: Read the optional attribute(StartUpCurrentLevel and RemainingTime) in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4a: TH reads the optional attribute(StartUpCurrentLevel and RemainingTime) in AttributeList\n");
             if (ShouldSkip("LVL.S.F01")) {
                 NextTest();
                 return;
             }
-            err = TestStep3bReadTheOptionalAttributeStartUpCurrentLevelAndRemainingTimeInAttributeList_8();
+            err = TestStep4aThReadsTheOptionalAttributeStartUpCurrentLevelAndRemainingTimeInAttributeList_8();
             break;
         case 9:
-            ChipLogProgress(chipTool, " ***** Test Step 9 : Step 3c: Read the optional attribute(CurrentFrequency, MinFrequency and MinFrequency) in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4b: TH reads the optional attribute(CurrentFrequency, MinFrequency and MinFrequency) in AttributeList\n");
             if (ShouldSkip("LVL.S.F02")) {
                 NextTest();
                 return;
             }
-            err = TestStep3cReadTheOptionalAttributeCurrentFrequencyMinFrequencyAndMinFrequencyInAttributeList_9();
+            err = TestStep4bThReadsTheOptionalAttributeCurrentFrequencyMinFrequencyAndMinFrequencyInAttributeList_9();
             break;
         case 10:
-            ChipLogProgress(chipTool, " ***** Test Step 10 : Step 3d: Read the optional attribute(MinLevel) in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 10 : Step 4c: TH reads the optional attribute(MinLevel) in AttributeList\n");
             if (ShouldSkip("LVL.S.A0002")) {
                 NextTest();
                 return;
             }
-            err = TestStep3dReadTheOptionalAttributeMinLevelInAttributeList_10();
+            err = TestStep4cThReadsTheOptionalAttributeMinLevelInAttributeList_10();
             break;
         case 11:
-            ChipLogProgress(chipTool, " ***** Test Step 11 : Step 3e: Read the optional attribute(MaxLevel) in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 11 : Step 4d: TH reads the optional attribute(MaxLevel) in AttributeList\n");
             if (ShouldSkip("LVL.S.A0003")) {
                 NextTest();
                 return;
             }
-            err = TestStep3eReadTheOptionalAttributeMaxLevelInAttributeList_11();
+            err = TestStep4dThReadsTheOptionalAttributeMaxLevelInAttributeList_11();
             break;
         case 12:
-            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 3f: Read the optional attribute(OnOffTransitionTime) in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 4e: TH reads the optional attribute(OnOffTransitionTime) in AttributeList\n");
             if (ShouldSkip("LVL.S.A0010")) {
                 NextTest();
                 return;
             }
-            err = TestStep3fReadTheOptionalAttributeOnOffTransitionTimeInAttributeList_12();
+            err = TestStep4eThReadsTheOptionalAttributeOnOffTransitionTimeInAttributeList_12();
             break;
         case 13:
-            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 3g: Read the optional attribute(OnTransitionTime) in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 4f: TH reads the optional attribute(OnTransitionTime) in AttributeList\n");
             if (ShouldSkip("LVL.S.A0012")) {
                 NextTest();
                 return;
             }
-            err = TestStep3gReadTheOptionalAttributeOnTransitionTimeInAttributeList_13();
+            err = TestStep4fThReadsTheOptionalAttributeOnTransitionTimeInAttributeList_13();
             break;
         case 14:
-            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 3h: Read the optional attribute(OffTransitionTime) in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 4g: TH reads the optional attribute(OffTransitionTime) in AttributeList\n");
             if (ShouldSkip("LVL.S.A0013")) {
                 NextTest();
                 return;
             }
-            err = TestStep3hReadTheOptionalAttributeOffTransitionTimeInAttributeList_14();
+            err = TestStep4gThReadsTheOptionalAttributeOffTransitionTimeInAttributeList_14();
             break;
         case 15:
-            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 3i: Read the optional attribute(DefaultMoveRate) in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 4h: TH reads the optional attribute(DefaultMoveRate) in AttributeList\n");
             if (ShouldSkip("LVL.S.A0014")) {
                 NextTest();
                 return;
             }
-            err = TestStep3iReadTheOptionalAttributeDefaultMoveRateInAttributeList_15();
+            err = TestStep4hThReadsTheOptionalAttributeDefaultMoveRateInAttributeList_15();
             break;
         case 16:
-            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 4a: Read the global attribute: AcceptedCommandList\n");
-            err = TestStep4aReadTheGlobalAttributeAcceptedCommandList_16();
-            break;
-        case 17:
-            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 4a.1: Read the Feature-dependent(LVL.S.F02) command in AcceptedCommandList\n");
-            if (ShouldSkip("LVL.S.F02")) {
-                NextTest();
-                return;
-            }
-            err = TestStep4a1ReadTheFeatureDependentLVLSF02CommandInAcceptedCommandList_17();
-            break;
-        case 18:
-            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 4b: Read the global attribute: GeneratedCommandList\n");
-            err = TestStep4bReadTheGlobalAttributeGeneratedCommandList_18();
-            break;
-        case 19:
-            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 5: Read the global attribute: EventList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 5: Read the global attribute: EventList\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
+        case 17:
+            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 6a: TH reads from the DUT the AcceptedCommandList attribute.\n");
+            err = TestStep6aThReadsFromTheDutTheAcceptedCommandListAttribute_17();
+            break;
+        case 18:
+            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 6a.1: TH reads the Feature-dependent(LVL.S.F02) command in AcceptedCommandList\n");
+            if (ShouldSkip("LVL.S.F02")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6a1ThReadsTheFeatureDependentLVLSF02CommandInAcceptedCommandList_18();
+            break;
+        case 19:
+            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 7: TH reads from the DUT the GeneratedCommandList attribute.\n");
+            err = TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_19();
+            break;
         }
 
         if (CHIP_NO_ERROR != err) {
@@ -58674,7 +59225,7 @@
     chip::Optional<chip::EndpointId> mEndpoint;
     chip::Optional<uint16_t> mTimeout;
 
-    CHIP_ERROR TestStep0WaitForTheCommissionedDeviceToBeRetrieved_0()
+    CHIP_ERROR TestStep1CommissionDutToThCanBeSkippedIfDoneInAPrecedingTest_0()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
@@ -58682,7 +59233,7 @@
         return WaitForCommissionee("alpha", value);
     }
 
-    CHIP_ERROR TestStep1ReadTheGlobalAttributeClusterRevision_1()
+    CHIP_ERROR TestStep2ThReadsFromTheDutTheClusterRevisionAttribute_1()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -58691,9 +59242,9 @@
 
         [cluster readAttributeClusterRevisionWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 1: Read the global attribute: ClusterRevision: Error: %@", err);
+                NSLog(@"Step 2: TH reads from the DUT the ClusterRevision attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 1: Read the global attribute: ClusterRevision: Success");
+                NSLog(@"Step 2: TH reads from the DUT the ClusterRevision attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -58710,7 +59261,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep2aReadTheGlobalAttributeFeatureMap_2()
+    CHIP_ERROR TestStep3aThReadsFromTheDutTheFeatureMapAttribute_2()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -58719,9 +59270,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 2a: Read the global attribute: FeatureMap: Error: %@", err);
+                NSLog(@"Step 3a: TH reads from the DUT the FeatureMap attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 2a: Read the global attribute: FeatureMap: Success");
+                NSLog(@"Step 3a: TH reads from the DUT the FeatureMap attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -58738,7 +59289,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep2bGivenLvlsf00ooEnsureFeaturemapHasTheCorrectBitSet_3()
+    CHIP_ERROR TestStep3bGivenLvlsf00ooEnsureFeaturemapHasTheCorrectBitSet_3()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -58747,9 +59298,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 2b: Given LVL.S.F00(OO) ensure featuremap has the correct bit set: Error: %@", err);
+                NSLog(@"Step 3b: Given LVL.S.F00(OO) ensure featuremap has the correct bit set: Error: %@", err);
             } else {
-                NSLog(@"Step 2b: Given LVL.S.F00(OO) ensure featuremap has the correct bit set: Success");
+                NSLog(@"Step 3b: Given LVL.S.F00(OO) ensure featuremap has the correct bit set: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -58761,7 +59312,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep2cGivenLvlsf01ltEnsureFeaturemapHasTheCorrectBitSet_4()
+    CHIP_ERROR TestStep3cGivenLvlsf01ltEnsureFeaturemapHasTheCorrectBitSet_4()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -58770,9 +59321,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 2c: Given LVL.S.F01(LT) ensure featuremap has the correct bit set: Error: %@", err);
+                NSLog(@"Step 3c: Given LVL.S.F01(LT) ensure featuremap has the correct bit set: Error: %@", err);
             } else {
-                NSLog(@"Step 2c: Given LVL.S.F01(LT) ensure featuremap has the correct bit set: Success");
+                NSLog(@"Step 3c: Given LVL.S.F01(LT) ensure featuremap has the correct bit set: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -58784,7 +59335,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep2dGivenLvlsf02fqEnsureFeaturemapHasTheCorrectBitSet_5()
+    CHIP_ERROR TestStep3dGivenLvlsf02fqEnsureFeaturemapHasTheCorrectBitSet_5()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -58793,9 +59344,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 2d: Given LVL.S.F02(FQ) ensure featuremap has the correct bit set: Error: %@", err);
+                NSLog(@"Step 3d: Given LVL.S.F02(FQ) ensure featuremap has the correct bit set: Error: %@", err);
             } else {
-                NSLog(@"Step 2d: Given LVL.S.F02(FQ) ensure featuremap has the correct bit set: Success");
+                NSLog(@"Step 3d: Given LVL.S.F02(FQ) ensure featuremap has the correct bit set: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -58807,7 +59358,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3aReadTheGlobalAttributeAttributeList_6()
+    CHIP_ERROR TestStep4ThReadsFromTheDutTheAttributeListAttribute_6()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -58816,9 +59367,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3a: Read the global attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4: TH reads from the DUT the AttributeList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 3a: Read the global attribute: AttributeList: Success");
+                NSLog(@"Step 4: TH reads from the DUT the AttributeList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -58840,7 +59391,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3aReadTheGlobalAttributeAttributeList_7()
+    CHIP_ERROR TestStep4ThReadsFromTheDutTheAttributeListAttribute_7()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -58849,9 +59400,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3a: Read the global attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4: TH reads from the DUT the AttributeList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 3a: Read the global attribute: AttributeList: Success");
+                NSLog(@"Step 4: TH reads from the DUT the AttributeList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -58872,7 +59423,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3bReadTheOptionalAttributeStartUpCurrentLevelAndRemainingTimeInAttributeList_8()
+    CHIP_ERROR TestStep4aThReadsTheOptionalAttributeStartUpCurrentLevelAndRemainingTimeInAttributeList_8()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -58881,9 +59432,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3b: Read the optional attribute(StartUpCurrentLevel and RemainingTime) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4a: TH reads the optional attribute(StartUpCurrentLevel and RemainingTime) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 3b: Read the optional attribute(StartUpCurrentLevel and RemainingTime) in AttributeList: Success");
+                NSLog(@"Step 4a: TH reads the optional attribute(StartUpCurrentLevel and RemainingTime) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -58898,7 +59449,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3cReadTheOptionalAttributeCurrentFrequencyMinFrequencyAndMinFrequencyInAttributeList_9()
+    CHIP_ERROR TestStep4bThReadsTheOptionalAttributeCurrentFrequencyMinFrequencyAndMinFrequencyInAttributeList_9()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -58907,9 +59458,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3c: Read the optional attribute(CurrentFrequency, MinFrequency and MinFrequency) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4b: TH reads the optional attribute(CurrentFrequency, MinFrequency and MinFrequency) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 3c: Read the optional attribute(CurrentFrequency, MinFrequency and MinFrequency) in AttributeList: Success");
+                NSLog(@"Step 4b: TH reads the optional attribute(CurrentFrequency, MinFrequency and MinFrequency) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -58925,7 +59476,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3dReadTheOptionalAttributeMinLevelInAttributeList_10()
+    CHIP_ERROR TestStep4cThReadsTheOptionalAttributeMinLevelInAttributeList_10()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -58934,9 +59485,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3d: Read the optional attribute(MinLevel) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4c: TH reads the optional attribute(MinLevel) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 3d: Read the optional attribute(MinLevel) in AttributeList: Success");
+                NSLog(@"Step 4c: TH reads the optional attribute(MinLevel) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -58950,7 +59501,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3eReadTheOptionalAttributeMaxLevelInAttributeList_11()
+    CHIP_ERROR TestStep4dThReadsTheOptionalAttributeMaxLevelInAttributeList_11()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -58959,9 +59510,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3e: Read the optional attribute(MaxLevel) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4d: TH reads the optional attribute(MaxLevel) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 3e: Read the optional attribute(MaxLevel) in AttributeList: Success");
+                NSLog(@"Step 4d: TH reads the optional attribute(MaxLevel) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -58975,7 +59526,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3fReadTheOptionalAttributeOnOffTransitionTimeInAttributeList_12()
+    CHIP_ERROR TestStep4eThReadsTheOptionalAttributeOnOffTransitionTimeInAttributeList_12()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -58984,9 +59535,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3f: Read the optional attribute(OnOffTransitionTime) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4e: TH reads the optional attribute(OnOffTransitionTime) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 3f: Read the optional attribute(OnOffTransitionTime) in AttributeList: Success");
+                NSLog(@"Step 4e: TH reads the optional attribute(OnOffTransitionTime) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -59000,7 +59551,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3gReadTheOptionalAttributeOnTransitionTimeInAttributeList_13()
+    CHIP_ERROR TestStep4fThReadsTheOptionalAttributeOnTransitionTimeInAttributeList_13()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -59009,9 +59560,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3g: Read the optional attribute(OnTransitionTime) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4f: TH reads the optional attribute(OnTransitionTime) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 3g: Read the optional attribute(OnTransitionTime) in AttributeList: Success");
+                NSLog(@"Step 4f: TH reads the optional attribute(OnTransitionTime) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -59025,7 +59576,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3hReadTheOptionalAttributeOffTransitionTimeInAttributeList_14()
+    CHIP_ERROR TestStep4gThReadsTheOptionalAttributeOffTransitionTimeInAttributeList_14()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -59034,9 +59585,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3h: Read the optional attribute(OffTransitionTime) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4g: TH reads the optional attribute(OffTransitionTime) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 3h: Read the optional attribute(OffTransitionTime) in AttributeList: Success");
+                NSLog(@"Step 4g: TH reads the optional attribute(OffTransitionTime) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -59050,7 +59601,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3iReadTheOptionalAttributeDefaultMoveRateInAttributeList_15()
+    CHIP_ERROR TestStep4hThReadsTheOptionalAttributeDefaultMoveRateInAttributeList_15()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -59059,9 +59610,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3i: Read the optional attribute(DefaultMoveRate) in AttributeList: Error: %@", err);
+                NSLog(@"Step 4h: TH reads the optional attribute(DefaultMoveRate) in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 3i: Read the optional attribute(DefaultMoveRate) in AttributeList: Success");
+                NSLog(@"Step 4h: TH reads the optional attribute(DefaultMoveRate) in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -59075,7 +59626,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4aReadTheGlobalAttributeAcceptedCommandList_16()
+    CHIP_ERROR TestStep6aThReadsFromTheDutTheAcceptedCommandListAttribute_17()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -59084,9 +59635,9 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4a: Read the global attribute: AcceptedCommandList: Error: %@", err);
+                NSLog(@"Step 6a: TH reads from the DUT the AcceptedCommandList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 4a: Read the global attribute: AcceptedCommandList: Success");
+                NSLog(@"Step 6a: TH reads from the DUT the AcceptedCommandList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -59107,7 +59658,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4a1ReadTheFeatureDependentLVLSF02CommandInAcceptedCommandList_17()
+    CHIP_ERROR TestStep6a1ThReadsTheFeatureDependentLVLSF02CommandInAcceptedCommandList_18()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -59116,9 +59667,9 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4a.1: Read the Feature-dependent(LVL.S.F02) command in AcceptedCommandList: Error: %@", err);
+                NSLog(@"Step 6a.1: TH reads the Feature-dependent(LVL.S.F02) command in AcceptedCommandList: Error: %@", err);
             } else {
-                NSLog(@"Step 4a.1: Read the Feature-dependent(LVL.S.F02) command in AcceptedCommandList: Success");
+                NSLog(@"Step 6a.1: TH reads the Feature-dependent(LVL.S.F02) command in AcceptedCommandList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -59132,7 +59683,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4bReadTheGlobalAttributeGeneratedCommandList_18()
+    CHIP_ERROR TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_19()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -59141,9 +59692,9 @@
 
         [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4b: Read the global attribute: GeneratedCommandList: Error: %@", err);
+                NSLog(@"Step 7: TH reads from the DUT the GeneratedCommandList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 4b: Read the global attribute: GeneratedCommandList: Success");
+                NSLog(@"Step 7: TH reads from the DUT the GeneratedCommandList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -68250,7 +68801,7 @@
             break;
         case 4:
             ChipLogProgress(chipTool, " ***** Test Step 4 : Step 5: Manually put the device in a state from which it will FAIL to transition to PIXIT.LWM.MODE_CHANGE_FAIL\n");
-            if (ShouldSkip("LWM.S.M.CAN_TEST_MODE_FAILURE && PICS_SKIP_SAMPLE_APP")) {
+            if (ShouldSkip("LWM.S.M.CAN_TEST_MODE_FAILURE && LWM.S.M.CAN_MANUALLY_CONTROLLED && PICS_SKIP_SAMPLE_APP")) {
                 NextTest();
                 return;
             }
@@ -68258,7 +68809,7 @@
             break;
         case 5:
             ChipLogProgress(chipTool, " ***** Test Step 5 : Step 6: TH reads from the DUT the CurrentMode attribute.\n");
-            if (ShouldSkip("LWM.S.A0001")) {
+            if (ShouldSkip("LWM.S.A0001 && LWM.S.M.CAN_MANUALLY_CONTROLLED")) {
                 NextTest();
                 return;
             }
@@ -68282,7 +68833,7 @@
             break;
         case 8:
             ChipLogProgress(chipTool, " ***** Test Step 8 : Step 9: Manually put the device in a state from which it will SUCCESSFULLY transition to PIXIT.LWM.MODE_CHANGE_OK\n");
-            if (ShouldSkip("PICS_SKIP_SAMPLE_APP")) {
+            if (ShouldSkip("LWM.S.M.CAN_MANUALLY_CONTROLLED && PICS_SKIP_SAMPLE_APP")) {
                 NextTest();
                 return;
             }
@@ -68290,7 +68841,7 @@
             break;
         case 9:
             ChipLogProgress(chipTool, " ***** Test Step 9 : Step 10: TH reads from the DUT the CurrentMode attribute.\n");
-            if (ShouldSkip("LWM.S.A0001")) {
+            if (ShouldSkip("LWM.S.M.CAN_MANUALLY_CONTROLLED && LWM.S.A0001")) {
                 NextTest();
                 return;
             }
@@ -89311,20 +89862,20 @@
         // incorrect mTestIndex value observed when we get the response.
         switch (mTestIndex++) {
         case 0:
-            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: Wait for the commissioned device to be retrieved\n");
-            err = TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0();
+            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: Commission DUT to TH (can be skipped if done in a preceding test).\n");
+            err = TestStep1CommissionDutToThCanBeSkippedIfDoneInAPrecedingTest_0();
             break;
         case 1:
-            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Read the global attribute: ClusterRevision\n");
-            err = TestStep2ReadTheGlobalAttributeClusterRevision_1();
+            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Test Harness Client reads ClusterRevision attribute.\n");
+            err = TestStep2TestHarnessClientReadsClusterRevisionAttribute_1();
             break;
         case 2:
-            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3a: Read the global attribute: FeatureMap\n");
+            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3a: TH reads from the DUT the FeatureMap attribute.\n");
             if (ShouldSkip(" !PS.S.F00 && !PS.S.F01 && !PS.S.F02 && !PS.S.F03 ")) {
                 NextTest();
                 return;
             }
-            err = TestStep3aReadTheGlobalAttributeFeatureMap_2();
+            err = TestStep3aThReadsFromTheDutTheFeatureMapAttribute_2();
             break;
         case 3:
             ChipLogProgress(chipTool, " ***** Test Step 3 : Step 3b: Given PS.S.F00(WIRED) ensure featuremap has the correct bit set\n");
@@ -89359,93 +89910,93 @@
             err = TestStep3dGivenPssf03replcEnsureFeaturemapHasTheCorrectBitSet_6();
             break;
         case 7:
-            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4: Read the global attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 4: Test Harness Client reads AttributeList attribute.\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep4ReadTheGlobalAttributeAttributeList_7();
+            err = TestStep4TestHarnessClientReadsAttributeListAttribute_7();
             break;
         case 8:
-            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4: Read the global attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 4: Test Harness Client reads AttributeList attribute.\n");
             if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep4ReadTheGlobalAttributeAttributeList_8();
+            err = TestStep4TestHarnessClientReadsAttributeListAttribute_8();
             break;
         case 9:
-            ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4a: Read the Feature dependent(PS.S.F00-WIRED) attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 9 : Step 4a: TH reads the Feature dependent(PS.S.F00-WIRED) attribute in AttributeList\n");
             if (ShouldSkip("PS.S.F00")) {
                 NextTest();
                 return;
             }
-            err = TestStep4aReadTheFeatureDependentPSSF00WiredAttributeInAttributeList_9();
+            err = TestStep4aThReadsTheFeatureDependentPSSF00WiredAttributeInAttributeList_9();
             break;
         case 10:
-            ChipLogProgress(chipTool, " ***** Test Step 10 : Step 4b: Read the Feature dependent(PS.S.F01-BAT) attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 10 : Step 4b: TH reads the Feature dependent(PS.S.F01-BAT) attribute in AttributeList\n");
             if (ShouldSkip("PS.S.F01")) {
                 NextTest();
                 return;
             }
-            err = TestStep4bReadTheFeatureDependentPSSF01BatAttributeInAttributeList_10();
+            err = TestStep4bThReadsTheFeatureDependentPSSF01BatAttributeInAttributeList_10();
             break;
         case 11:
-            ChipLogProgress(chipTool, " ***** Test Step 11 : Step 4c: Read the Feature dependent(PS.S.F02-RECHG) attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 11 : Step 4c: TH reads the Feature dependent(PS.S.F02-RECHG) attribute in AttributeList\n");
             if (ShouldSkip("PS.S.F02")) {
                 NextTest();
                 return;
             }
-            err = TestStep4cReadTheFeatureDependentPSSF02RechgAttributeInAttributeList_11();
+            err = TestStep4cThReadsTheFeatureDependentPSSF02RechgAttributeInAttributeList_11();
             break;
         case 12:
-            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 4d: Read the Feature dependent(PS.S.F03-REPLC) attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 4d: TH reads the Feature dependent(PS.S.F03-REPLC) attribute in AttributeList\n");
             if (ShouldSkip("PS.S.F03")) {
                 NextTest();
                 return;
             }
-            err = TestStep4dReadTheFeatureDependentPSSF03ReplcAttributeInAttributeList_12();
+            err = TestStep4dThReadsTheFeatureDependentPSSF03ReplcAttributeInAttributeList_12();
             break;
         case 13:
-            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 5: Read the global attribute: AcceptedCommandList\n");
-            err = TestStep5ReadTheGlobalAttributeAcceptedCommandList_13();
-            break;
-        case 14:
-            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 6: Read the global attribute: GeneratedCommandList\n");
-            err = TestStep6ReadTheGlobalAttributeGeneratedCommandList_14();
-            break;
-        case 15:
-            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 7a: Read the global attribute: EventList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 5a: Test Harness Client reads EventList attribute.\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED &&  !PS.S.E00 && !PS.S.E01 && !PS.S.E02 ")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
-        case 16:
-            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 7b: Read PS.S.E00(WiredFaultChange) event in EventList\n");
+        case 14:
+            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 5b: TH reads PS.S.E00(WiredFaultChange) event in EventList\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PS.S.E00")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
-        case 17:
-            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 7c: Read PS.S.E01(BatFaultChange) event in EventList\n");
+        case 15:
+            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 5c: TH reads PS.S.E01(BatFaultChange) event in EventList\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PS.S.E01")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
-        case 18:
-            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 7d: Read PS.S.E02(BatChargeFaultChange) event in EventList\n");
+        case 16:
+            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 5d: TH reads PS.S.E02(BatChargeFaultChange) event in EventList\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED && PS.S.E02")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
+        case 17:
+            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 6: Test Harness Client reads AcceptedCommandList attribute.\n");
+            err = TestStep6TestHarnessClientReadsAcceptedCommandListAttribute_17();
+            break;
+        case 18:
+            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 7: Test Harness Client reads GeneratedCommandList attribute.\n");
+            err = TestStep7TestHarnessClientReadsGeneratedCommandListAttribute_18();
+            break;
         }
 
         if (CHIP_NO_ERROR != err) {
@@ -89531,7 +90082,7 @@
     chip::Optional<chip::EndpointId> mEndpoint;
     chip::Optional<uint16_t> mTimeout;
 
-    CHIP_ERROR TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0()
+    CHIP_ERROR TestStep1CommissionDutToThCanBeSkippedIfDoneInAPrecedingTest_0()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
@@ -89539,7 +90090,7 @@
         return WaitForCommissionee("alpha", value);
     }
 
-    CHIP_ERROR TestStep2ReadTheGlobalAttributeClusterRevision_1()
+    CHIP_ERROR TestStep2TestHarnessClientReadsClusterRevisionAttribute_1()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -89548,9 +90099,9 @@
 
         [cluster readAttributeClusterRevisionWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 2: Read the global attribute: ClusterRevision: Error: %@", err);
+                NSLog(@"Step 2: Test Harness Client reads ClusterRevision attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 2: Read the global attribute: ClusterRevision: Success");
+                NSLog(@"Step 2: Test Harness Client reads ClusterRevision attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -89567,7 +90118,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3aReadTheGlobalAttributeFeatureMap_2()
+    CHIP_ERROR TestStep3aThReadsFromTheDutTheFeatureMapAttribute_2()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -89576,9 +90127,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3a: Read the global attribute: FeatureMap: Error: %@", err);
+                NSLog(@"Step 3a: TH reads from the DUT the FeatureMap attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 3a: Read the global attribute: FeatureMap: Success");
+                NSLog(@"Step 3a: TH reads from the DUT the FeatureMap attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -89687,7 +90238,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4ReadTheGlobalAttributeAttributeList_7()
+    CHIP_ERROR TestStep4TestHarnessClientReadsAttributeListAttribute_7()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -89696,9 +90247,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4: Read the global attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4: Test Harness Client reads AttributeList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 4: Read the global attribute: AttributeList: Success");
+                NSLog(@"Step 4: Test Harness Client reads AttributeList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -89721,7 +90272,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4ReadTheGlobalAttributeAttributeList_8()
+    CHIP_ERROR TestStep4TestHarnessClientReadsAttributeListAttribute_8()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -89730,9 +90281,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4: Read the global attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4: Test Harness Client reads AttributeList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 4: Read the global attribute: AttributeList: Success");
+                NSLog(@"Step 4: Test Harness Client reads AttributeList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -89754,7 +90305,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4aReadTheFeatureDependentPSSF00WiredAttributeInAttributeList_9()
+    CHIP_ERROR TestStep4aThReadsTheFeatureDependentPSSF00WiredAttributeInAttributeList_9()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -89763,9 +90314,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4a: Read the Feature dependent(PS.S.F00-WIRED) attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4a: TH reads the Feature dependent(PS.S.F00-WIRED) attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4a: Read the Feature dependent(PS.S.F00-WIRED) attribute in AttributeList: Success");
+                NSLog(@"Step 4a: TH reads the Feature dependent(PS.S.F00-WIRED) attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -89779,7 +90330,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4bReadTheFeatureDependentPSSF01BatAttributeInAttributeList_10()
+    CHIP_ERROR TestStep4bThReadsTheFeatureDependentPSSF01BatAttributeInAttributeList_10()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -89788,9 +90339,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4b: Read the Feature dependent(PS.S.F01-BAT) attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4b: TH reads the Feature dependent(PS.S.F01-BAT) attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4b: Read the Feature dependent(PS.S.F01-BAT) attribute in AttributeList: Success");
+                NSLog(@"Step 4b: TH reads the Feature dependent(PS.S.F01-BAT) attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -89806,7 +90357,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4cReadTheFeatureDependentPSSF02RechgAttributeInAttributeList_11()
+    CHIP_ERROR TestStep4cThReadsTheFeatureDependentPSSF02RechgAttributeInAttributeList_11()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -89815,9 +90366,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4c: Read the Feature dependent(PS.S.F02-RECHG) attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4c: TH reads the Feature dependent(PS.S.F02-RECHG) attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4c: Read the Feature dependent(PS.S.F02-RECHG) attribute in AttributeList: Success");
+                NSLog(@"Step 4c: TH reads the Feature dependent(PS.S.F02-RECHG) attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -89832,7 +90383,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4dReadTheFeatureDependentPSSF03ReplcAttributeInAttributeList_12()
+    CHIP_ERROR TestStep4dThReadsTheFeatureDependentPSSF03ReplcAttributeInAttributeList_12()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -89841,9 +90392,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4d: Read the Feature dependent(PS.S.F03-REPLC) attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4d: TH reads the Feature dependent(PS.S.F03-REPLC) attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4d: Read the Feature dependent(PS.S.F03-REPLC) attribute in AttributeList: Success");
+                NSLog(@"Step 4d: TH reads the Feature dependent(PS.S.F03-REPLC) attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -89858,7 +90409,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5ReadTheGlobalAttributeAcceptedCommandList_13()
+    CHIP_ERROR TestStep6TestHarnessClientReadsAcceptedCommandListAttribute_17()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -89867,9 +90418,9 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 5: Read the global attribute: AcceptedCommandList: Error: %@", err);
+                NSLog(@"Step 6: Test Harness Client reads AcceptedCommandList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 5: Read the global attribute: AcceptedCommandList: Success");
+                NSLog(@"Step 6: Test Harness Client reads AcceptedCommandList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -89886,7 +90437,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6ReadTheGlobalAttributeGeneratedCommandList_14()
+    CHIP_ERROR TestStep7TestHarnessClientReadsGeneratedCommandListAttribute_18()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -89895,9 +90446,9 @@
 
         [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 6: Read the global attribute: GeneratedCommandList: Error: %@", err);
+                NSLog(@"Step 7: Test Harness Client reads GeneratedCommandList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 6: Read the global attribute: GeneratedCommandList: Success");
+                NSLog(@"Step 7: Test Harness Client reads GeneratedCommandList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -103360,20 +103911,20 @@
         // incorrect mTestIndex value observed when we get the response.
         switch (mTestIndex++) {
         case 0:
-            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: Wait for the commissioned device to be retrieved\n");
-            err = TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0();
+            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: Commission DUT to TH (can be skipped if done in a preceding test).\n");
+            err = TestStep1CommissionDutToThCanBeSkippedIfDoneInAPrecedingTest_0();
             break;
         case 1:
-            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: Read the global attribute: ClusterRevision\n");
-            err = TestStep2ReadTheGlobalAttributeClusterRevision_1();
+            ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads from the DUT the ClusterRevision attribute.\n");
+            err = TestStep2ThReadsFromTheDutTheClusterRevisionAttribute_1();
             break;
         case 2:
-            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3a: Read the global attribute: FeatureMap\n");
+            ChipLogProgress(chipTool, " ***** Test Step 2 : Step 3a: TH reads from the DUT the FeatureMap attribute.\n");
             if (ShouldSkip("!TSTAT.S.F00 && !TSTAT.S.F01 && !TSTAT.S.F02 && !TSTAT.S.F03 && !TSTAT.S.F04 && !TSTAT.S.F05")) {
                 NextTest();
                 return;
             }
-            err = TestStep3aReadTheGlobalAttributeFeatureMap_2();
+            err = TestStep3aThReadsFromTheDutTheFeatureMapAttribute_2();
             break;
         case 3:
             ChipLogProgress(chipTool, " ***** Test Step 3 : Step 3b: Given TSTAT.S.F00(HEAT ensure featuremap has the correct bit set\n");
@@ -103432,401 +103983,401 @@
             err = TestStep3hGivenTstatsf06ltneEnsureFeaturemapHasTheCorrectBitSet_9();
             break;
         case 10:
-            ChipLogProgress(chipTool, " ***** Test Step 10 : Step 4a: Read the global attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 10 : Step 4a: TH reads from the DUT the AttributeList attribute.\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep4aReadTheGlobalAttributeAttributeList_10();
+            err = TestStep4aThReadsFromTheDutTheAttributeListAttribute_10();
             break;
         case 11:
-            ChipLogProgress(chipTool, " ***** Test Step 11 : Step 4a: Read the global attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 11 : Step 4a: TH reads from the DUT the AttributeList attribute.\n");
             if (ShouldSkip("!PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
-            err = TestStep4aReadTheGlobalAttributeAttributeList_11();
+            err = TestStep4aThReadsFromTheDutTheAttributeListAttribute_11();
             break;
         case 12:
-            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 4b: Read the Feature dependent(TSTAT.S.F00(HEAT)) attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 4b: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F00")) {
                 NextTest();
                 return;
             }
-            err = TestStep4bReadTheFeatureDependentTSTATSF00HEATAttributeInAttributeList_12();
+            err = TestStep4bThReadsTheFeatureDependentTSTATSF00HEATAttributeInAttributeList_12();
             break;
         case 13:
-            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 4c: Read the Feature dependent(TSTAT.S.F01(COOL)) attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 4c: TH reads the Feature dependent(TSTAT.S.F01(COOL)) attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F01")) {
                 NextTest();
                 return;
             }
-            err = TestStep4cReadTheFeatureDependentTSTATSF01COOLAttributeInAttributeList_13();
+            err = TestStep4cThReadsTheFeatureDependentTSTATSF01COOLAttributeInAttributeList_13();
             break;
         case 14:
-            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 4d: Read the Feature dependent(TSTAT.S.F02(OCC)) attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 4d: TH reads the Feature dependent(TSTAT.S.F02(OCC)) attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F02")) {
                 NextTest();
                 return;
             }
-            err = TestStep4dReadTheFeatureDependentTSTATSF02OCCAttributeInAttributeList_14();
+            err = TestStep4dThReadsTheFeatureDependentTSTATSF02OCCAttributeInAttributeList_14();
             break;
         case 15:
-            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 4e: Read the Feature dependent(TSTAT.S.F00(HEAT) & TSTAT.S.F02(OCC)) attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 4e: TH reads the Feature dependent(TSTAT.S.F00(HEAT) & TSTAT.S.F02(OCC)) attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F00 && TSTAT.S.F02")) {
                 NextTest();
                 return;
             }
-            err = TestStep4eReadTheFeatureDependentTSTATSF00HEATTstatsf02occAttributeInAttributeList_15();
+            err = TestStep4eThReadsTheFeatureDependentTSTATSF00HEATTstatsf02occAttributeInAttributeList_15();
             break;
         case 16:
-            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 4f: Read the Feature dependent(TSTAT.S.F01(COOL) & TSTAT.S.F02(OCC)) attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 4f: TH reads the Feature dependent(TSTAT.S.F01(COOL) & TSTAT.S.F02(OCC)) attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F01 && TSTAT.S.F02")) {
                 NextTest();
                 return;
             }
-            err = TestStep4fReadTheFeatureDependentTSTATSF01COOLTstatsf02occAttributeInAttributeList_16();
+            err = TestStep4fThReadsTheFeatureDependentTSTATSF01COOLTstatsf02occAttributeInAttributeList_16();
             break;
         case 17:
-            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 4g: Read the Feature dependent(TSTAT.S.F05(AUTO)) attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 4g: TH reads the Feature dependent(TSTAT.S.F05(AUTO)) attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F05")) {
                 NextTest();
                 return;
             }
-            err = TestStep4gReadTheFeatureDependentTSTATSF05AUTOAttributeInAttributeList_17();
+            err = TestStep4gThReadsTheFeatureDependentTSTATSF05AUTOAttributeInAttributeList_17();
             break;
         case 18:
-            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 4h: Read the Feature dependent(TSTAT.S.F03(SCH)) attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 4h: TH reads the Feature dependent(TSTAT.S.F03(SCH)) attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F03")) {
                 NextTest();
                 return;
             }
-            err = TestStep4hReadTheFeatureDependentTSTATSF03SCHAttributeInAttributeList_18();
+            err = TestStep4hThReadsTheFeatureDependentTSTATSF03SCHAttributeInAttributeList_18();
             break;
         case 19:
-            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 4i: Read the Feature dependent(TSTAT.S.F04(SB)) attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 4i: TH reads the Feature dependent(TSTAT.S.F04(SB)) attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F04")) {
                 NextTest();
                 return;
             }
-            err = TestStep4iReadTheFeatureDependentTSTATSF04SBAttributeInAttributeList_19();
+            err = TestStep4iThReadsTheFeatureDependentTSTATSF04SBAttributeInAttributeList_19();
             break;
         case 20:
-            ChipLogProgress(chipTool, " ***** Test Step 20 : Step 4j: Read the Feature dependent(TSTAT.S.F04(SB) & TSTAT.S.F02(OCC)) attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 20 : Step 4j: TH reads the Feature dependent(TSTAT.S.F04(SB) & TSTAT.S.F02(OCC)) attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F04 && TSTAT.S.F02")) {
                 NextTest();
                 return;
             }
-            err = TestStep4jReadTheFeatureDependentTSTATSF04SBTstatsf02occAttributeInAttributeList_20();
+            err = TestStep4jThReadsTheFeatureDependentTSTATSF04SBTstatsf02occAttributeInAttributeList_20();
             break;
         case 21:
-            ChipLogProgress(chipTool, " ***** Test Step 21 : Step 4k: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 21 : Step 4k: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0001")) {
                 NextTest();
                 return;
             }
-            err = TestStep4kReadTheOptionalAttributeInAttributeList_21();
+            err = TestStep4kThReadsTheOptionalAttributeInAttributeList_21();
             break;
         case 22:
-            ChipLogProgress(chipTool, " ***** Test Step 22 : Step 4l: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 22 : Step 4l: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0009")) {
                 NextTest();
                 return;
             }
-            err = TestStep4lReadTheOptionalAttributeInAttributeList_22();
+            err = TestStep4lThReadsTheOptionalAttributeInAttributeList_22();
             break;
         case 23:
-            ChipLogProgress(chipTool, " ***** Test Step 23 : Step 4m: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 23 : Step 4m: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0010")) {
                 NextTest();
                 return;
             }
-            err = TestStep4mReadTheOptionalAttributeInAttributeList_23();
+            err = TestStep4mThReadsTheOptionalAttributeInAttributeList_23();
             break;
         case 24:
-            ChipLogProgress(chipTool, " ***** Test Step 24 : Step 4n: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 24 : Step 4n: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A001a")) {
                 NextTest();
                 return;
             }
-            err = TestStep4nReadTheOptionalAttributeInAttributeList_24();
+            err = TestStep4nThReadsTheOptionalAttributeInAttributeList_24();
             break;
         case 25:
-            ChipLogProgress(chipTool, " ***** Test Step 25 : Step 4o: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 25 : Step 4o: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A001d")) {
                 NextTest();
                 return;
             }
-            err = TestStep4oReadTheOptionalAttributeInAttributeList_25();
+            err = TestStep4oThReadsTheOptionalAttributeInAttributeList_25();
             break;
         case 26:
-            ChipLogProgress(chipTool, " ***** Test Step 26 : Step 4p: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 26 : Step 4p: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0023")) {
                 NextTest();
                 return;
             }
-            err = TestStep4pReadTheOptionalAttributeInAttributeList_26();
+            err = TestStep4pThReadsTheOptionalAttributeInAttributeList_26();
             break;
         case 27:
-            ChipLogProgress(chipTool, " ***** Test Step 27 : Step 4q: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 27 : Step 4q: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0024")) {
                 NextTest();
                 return;
             }
-            err = TestStep4qReadTheOptionalAttributeInAttributeList_27();
+            err = TestStep4qThReadsTheOptionalAttributeInAttributeList_27();
             break;
         case 28:
-            ChipLogProgress(chipTool, " ***** Test Step 28 : Step 4r: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 28 : Step 4r: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0025")) {
                 NextTest();
                 return;
             }
-            err = TestStep4rReadTheOptionalAttributeInAttributeList_28();
+            err = TestStep4rThReadsTheOptionalAttributeInAttributeList_28();
             break;
         case 29:
-            ChipLogProgress(chipTool, " ***** Test Step 29 : Step 4s: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 29 : Step 4s: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0029")) {
                 NextTest();
                 return;
             }
-            err = TestStep4sReadTheOptionalAttributeInAttributeList_29();
+            err = TestStep4sThReadsTheOptionalAttributeInAttributeList_29();
             break;
         case 30:
-            ChipLogProgress(chipTool, " ***** Test Step 30 : Step 4t: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 30 : Step 4t: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0030")) {
                 NextTest();
                 return;
             }
-            err = TestStep4tReadTheOptionalAttributeInAttributeList_30();
+            err = TestStep4tThReadsTheOptionalAttributeInAttributeList_30();
             break;
         case 31:
-            ChipLogProgress(chipTool, " ***** Test Step 31 : Step 4u: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 31 : Step 4u: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0031")) {
                 NextTest();
                 return;
             }
-            err = TestStep4uReadTheOptionalAttributeInAttributeList_31();
+            err = TestStep4uThReadsTheOptionalAttributeInAttributeList_31();
             break;
         case 32:
-            ChipLogProgress(chipTool, " ***** Test Step 32 : Step 4x: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 32 : Step 4x: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0032")) {
                 NextTest();
                 return;
             }
-            err = TestStep4xReadTheOptionalAttributeInAttributeList_32();
+            err = TestStep4xThReadsTheOptionalAttributeInAttributeList_32();
             break;
         case 33:
-            ChipLogProgress(chipTool, " ***** Test Step 33 : Step 5y: Read the optional attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 33 : Step 4y: TH reads the optional attribute: AttributeList\n");
             if (ShouldSkip("TSTAT.S.A003a")) {
                 NextTest();
                 return;
             }
-            err = TestStep5yReadTheOptionalAttributeAttributeList_33();
+            err = TestStep4yThReadsTheOptionalAttributeAttributeList_33();
             break;
         case 34:
-            ChipLogProgress(chipTool, " ***** Test Step 34 : Step 4z: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 34 : Step 4z: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0040")) {
                 NextTest();
                 return;
             }
-            err = TestStep4zReadTheOptionalAttributeInAttributeList_34();
+            err = TestStep4zThReadsTheOptionalAttributeInAttributeList_34();
             break;
         case 35:
-            ChipLogProgress(chipTool, " ***** Test Step 35 : Step 4A: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 35 : Step 4A: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0041")) {
                 NextTest();
                 return;
             }
-            err = TestStep4aReadTheOptionalAttributeInAttributeList_35();
+            err = TestStep4aThReadsTheOptionalAttributeInAttributeList_35();
             break;
         case 36:
-            ChipLogProgress(chipTool, " ***** Test Step 36 : Step 4B: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 36 : Step 4B: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0042")) {
                 NextTest();
                 return;
             }
-            err = TestStep4bReadTheOptionalAttributeInAttributeList_36();
+            err = TestStep4bThReadsTheOptionalAttributeInAttributeList_36();
             break;
         case 37:
-            ChipLogProgress(chipTool, " ***** Test Step 37 : Step 4C: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 37 : Step 4C: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0043")) {
                 NextTest();
                 return;
             }
-            err = TestStep4cReadTheOptionalAttributeInAttributeList_37();
+            err = TestStep4cThReadsTheOptionalAttributeInAttributeList_37();
             break;
         case 38:
-            ChipLogProgress(chipTool, " ***** Test Step 38 : Step 5D: Read the optional attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 38 : Step 4D: TH reads the optional attribute: AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0044")) {
                 NextTest();
                 return;
             }
-            err = TestStep5dReadTheOptionalAttributeAttributeList_38();
+            err = TestStep4dThReadsTheOptionalAttributeAttributeList_38();
             break;
         case 39:
-            ChipLogProgress(chipTool, " ***** Test Step 39 : Step 4E: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 39 : Step 4E: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0045")) {
                 NextTest();
                 return;
             }
-            err = TestStep4eReadTheOptionalAttributeInAttributeList_39();
+            err = TestStep4eThReadsTheOptionalAttributeInAttributeList_39();
             break;
         case 40:
-            ChipLogProgress(chipTool, " ***** Test Step 40 : Step 4F: Read the optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 40 : Step 4F: TH reads the optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0046")) {
                 NextTest();
                 return;
             }
-            err = TestStep4fReadTheOptionalAttributeInAttributeList_40();
+            err = TestStep4fThReadsTheOptionalAttributeInAttributeList_40();
             break;
         case 41:
-            ChipLogProgress(chipTool, " ***** Test Step 41 : Step 5G: Read the optional attribute: AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 41 : Step 4g: TH reads the optional attribute: AttributeList\n");
             if (ShouldSkip("TSTAT.S.A0047")) {
                 NextTest();
                 return;
             }
-            err = TestStep5gReadTheOptionalAttributeAttributeList_41();
+            err = TestStep4gThReadsTheOptionalAttributeAttributeList_41();
             break;
         case 42:
-            ChipLogProgress(chipTool, " ***** Test Step 42 : Step 4H: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 42 : Step 4H: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F00 && TSTAT.S.A0003")) {
                 NextTest();
                 return;
             }
-            err = TestStep4hReadTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_42();
+            err = TestStep4hThReadsTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_42();
             break;
         case 43:
-            ChipLogProgress(chipTool, " ***** Test Step 43 : Step 4I: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 43 : Step 4I: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F00 && TSTAT.S.A0004")) {
                 NextTest();
                 return;
             }
-            err = TestStep4iReadTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_43();
+            err = TestStep4iThReadsTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_43();
             break;
         case 44:
-            ChipLogProgress(chipTool, " ***** Test Step 44 : Step 4J: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 44 : Step 4J: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F00 && TSTAT.S.A0008")) {
                 NextTest();
                 return;
             }
-            err = TestStep4jReadTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_44();
+            err = TestStep4jThReadsTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_44();
             break;
         case 45:
-            ChipLogProgress(chipTool, " ***** Test Step 45 : Step 4K: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 45 : Step 4K: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F00 && TSTAT.S.A0015")) {
                 NextTest();
                 return;
             }
-            err = TestStep4kReadTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_45();
+            err = TestStep4kThReadsTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_45();
             break;
         case 46:
-            ChipLogProgress(chipTool, " ***** Test Step 46 : Step 4L: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 46 : Step 4L: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F00 && TSTAT.S.A0016")) {
                 NextTest();
                 return;
             }
-            err = TestStep4lReadTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_46();
+            err = TestStep4lThReadsTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_46();
             break;
         case 47:
-            ChipLogProgress(chipTool, " ***** Test Step 47 : Step 4M: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 47 : Step 4M: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F01 && TSTAT.S.A0005")) {
                 NextTest();
                 return;
             }
-            err = TestStep4mReadTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_47();
+            err = TestStep4mThReadsTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_47();
             break;
         case 48:
-            ChipLogProgress(chipTool, " ***** Test Step 48 : Step 4N: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 48 : Step 4N: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F01 && TSTAT.S.A0007")) {
                 NextTest();
                 return;
             }
-            err = TestStep4nReadTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_48();
+            err = TestStep4nThReadsTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_48();
             break;
         case 49:
-            ChipLogProgress(chipTool, " ***** Test Step 49 : Step 4O: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 49 : Step 4O: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F01 && TSTAT.S.A0007")) {
                 NextTest();
                 return;
             }
-            err = TestStep4oReadTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_49();
+            err = TestStep4oThReadsTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_49();
             break;
         case 50:
-            ChipLogProgress(chipTool, " ***** Test Step 50 : Step 4P: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 50 : Step 4P: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F01 && TSTAT.S.A0017")) {
                 NextTest();
                 return;
             }
-            err = TestStep4pReadTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_50();
+            err = TestStep4pThReadsTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_50();
             break;
         case 51:
-            ChipLogProgress(chipTool, " ***** Test Step 51 : Step 4Q: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 51 : Step 4Q: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F01 && TSTAT.S.A0018")) {
                 NextTest();
                 return;
             }
-            err = TestStep4qReadTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_51();
+            err = TestStep4qThReadsTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_51();
             break;
         case 52:
-            ChipLogProgress(chipTool, " ***** Test Step 52 : Step 4R: Read the Feature dependent(TSTAT.S.F05(AUTO)) optional attribute in AttributeList\n");
+            ChipLogProgress(chipTool, " ***** Test Step 52 : Step 4R: TH reads the Feature dependent(TSTAT.S.F05(AUTO)) optional attribute in AttributeList\n");
             if (ShouldSkip("TSTAT.S.F05 && TSTAT.S.A001e")) {
                 NextTest();
                 return;
             }
-            err = TestStep4rReadTheFeatureDependentTSTATSF05AUTOOptionalAttributeInAttributeList_52();
+            err = TestStep4rThReadsTheFeatureDependentTSTATSF05AUTOOptionalAttributeInAttributeList_52();
             break;
         case 53:
-            ChipLogProgress(chipTool, " ***** Test Step 53 : Step 5a: Read the mandatory commands in AcceptedCommandList\n");
-            err = TestStep5aReadTheMandatoryCommandsInAcceptedCommandList_53();
-            break;
-        case 54:
-            ChipLogProgress(chipTool, " ***** Test Step 54 : Step 5b: Read Feature dependent(TSTAT.S.F03(SCH)) commands in AcceptedCommandList\n");
-            if (ShouldSkip("TSTAT.S.F03")) {
-                NextTest();
-                return;
-            }
-            err = TestStep5bReadFeatureDependentTSTATSF03SCHCommandsInAcceptedCommandList_54();
-            break;
-        case 55:
-            ChipLogProgress(chipTool, " ***** Test Step 55 : Step 5c: Read the optional (GetRelayStatusLog) command in AcceptedCommandList\n");
-            if (ShouldSkip("TSTAT.S.C04.Rsp")) {
-                NextTest();
-                return;
-            }
-            err = TestStep5cReadTheOptionalGetRelayStatusLogCommandInAcceptedCommandList_55();
-            break;
-        case 56:
-            ChipLogProgress(chipTool, " ***** Test Step 56 : Step 6a: Read the global attribute: GeneratedCommandList\n");
-            if (ShouldSkip(" !TSTAT.S.C04.Rsp && !TSTAT.S.C02.Rsp ")) {
-                NextTest();
-                return;
-            }
-            err = TestStep6aReadTheGlobalAttributeGeneratedCommandList_56();
-            break;
-        case 57:
-            ChipLogProgress(chipTool, " ***** Test Step 57 : Step 6b: Read Feature dependent(TSTAT.S.F03(SCH)) commands in GeneratedCommandList\n");
-            if (ShouldSkip("TSTAT.S.F03")) {
-                NextTest();
-                return;
-            }
-            err = TestStep6bReadFeatureDependentTSTATSF03SCHCommandsInGeneratedCommandList_57();
-            break;
-        case 58:
-            ChipLogProgress(chipTool, " ***** Test Step 58 : Step 6c: Read optional command (GetRelayStatusLogResponse) in GeneratedCommandList\n");
-            if (ShouldSkip("TSTAT.S.C04.Rsp")) {
-                NextTest();
-                return;
-            }
-            err = TestStep6cReadOptionalCommandGetRelayStatusLogResponseInGeneratedCommandList_58();
-            break;
-        case 59:
-            ChipLogProgress(chipTool, " ***** Test Step 59 : Step 7: Read EventList attribute from the DUT.\n");
+            ChipLogProgress(chipTool, " ***** Test Step 53 : Step 5: TH reads EventList attribute from the DUT.\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
+        case 54:
+            ChipLogProgress(chipTool, " ***** Test Step 54 : Step 6a: TH reads from the DUT the AcceptedCommandList attribute.\n");
+            err = TestStep6aThReadsFromTheDutTheAcceptedCommandListAttribute_54();
+            break;
+        case 55:
+            ChipLogProgress(chipTool, " ***** Test Step 55 : Step 6b: TH reads Feature dependent(TSTAT.S.F03(SCH)) commands in AcceptedCommandList\n");
+            if (ShouldSkip("TSTAT.S.F03")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6bThReadsFeatureDependentTSTATSF03SCHCommandsInAcceptedCommandList_55();
+            break;
+        case 56:
+            ChipLogProgress(chipTool, " ***** Test Step 56 : Step 6c: TH reads the optional (GetRelayStatusLog) command in AcceptedCommandList\n");
+            if (ShouldSkip("TSTAT.S.C04.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep6cThReadsTheOptionalGetRelayStatusLogCommandInAcceptedCommandList_56();
+            break;
+        case 57:
+            ChipLogProgress(chipTool, " ***** Test Step 57 : Step 7a: TH reads from the DUT the GeneratedCommandList attribute.\n");
+            if (ShouldSkip(" !TSTAT.S.C04.Rsp && !TSTAT.S.C02.Rsp ")) {
+                NextTest();
+                return;
+            }
+            err = TestStep7aThReadsFromTheDutTheGeneratedCommandListAttribute_57();
+            break;
+        case 58:
+            ChipLogProgress(chipTool, " ***** Test Step 58 : Step 7b: TH reads Feature dependent(TSTAT.S.F03(SCH)) commands in GeneratedCommandList\n");
+            if (ShouldSkip("TSTAT.S.F03")) {
+                NextTest();
+                return;
+            }
+            err = TestStep7bThReadsFeatureDependentTSTATSF03SCHCommandsInGeneratedCommandList_58();
+            break;
+        case 59:
+            ChipLogProgress(chipTool, " ***** Test Step 59 : Step 7c: TH reads optional command (GetRelayStatusLogResponse) in GeneratedCommandList\n");
+            if (ShouldSkip("TSTAT.S.C04.Rsp")) {
+                NextTest();
+                return;
+            }
+            err = TestStep7cThReadsOptionalCommandGetRelayStatusLogResponseInGeneratedCommandList_59();
+            break;
         }
 
         if (CHIP_NO_ERROR != err) {
@@ -104035,7 +104586,7 @@
     chip::Optional<chip::EndpointId> mEndpoint;
     chip::Optional<uint16_t> mTimeout;
 
-    CHIP_ERROR TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0()
+    CHIP_ERROR TestStep1CommissionDutToThCanBeSkippedIfDoneInAPrecedingTest_0()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
@@ -104043,7 +104594,7 @@
         return WaitForCommissionee("alpha", value);
     }
 
-    CHIP_ERROR TestStep2ReadTheGlobalAttributeClusterRevision_1()
+    CHIP_ERROR TestStep2ThReadsFromTheDutTheClusterRevisionAttribute_1()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104052,9 +104603,9 @@
 
         [cluster readAttributeClusterRevisionWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 2: Read the global attribute: ClusterRevision: Error: %@", err);
+                NSLog(@"Step 2: TH reads from the DUT the ClusterRevision attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 2: Read the global attribute: ClusterRevision: Success");
+                NSLog(@"Step 2: TH reads from the DUT the ClusterRevision attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104071,7 +104622,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3aReadTheGlobalAttributeFeatureMap_2()
+    CHIP_ERROR TestStep3aThReadsFromTheDutTheFeatureMapAttribute_2()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104080,9 +104631,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3a: Read the global attribute: FeatureMap: Error: %@", err);
+                NSLog(@"Step 3a: TH reads from the DUT the FeatureMap attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 3a: Read the global attribute: FeatureMap: Success");
+                NSLog(@"Step 3a: TH reads from the DUT the FeatureMap attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104260,7 +104811,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4aReadTheGlobalAttributeAttributeList_10()
+    CHIP_ERROR TestStep4aThReadsFromTheDutTheAttributeListAttribute_10()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104269,9 +104820,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4a: TH reads from the DUT the AttributeList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Success");
+                NSLog(@"Step 4a: TH reads from the DUT the AttributeList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104293,7 +104844,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4aReadTheGlobalAttributeAttributeList_11()
+    CHIP_ERROR TestStep4aThReadsFromTheDutTheAttributeListAttribute_11()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104302,9 +104853,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4a: TH reads from the DUT the AttributeList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 4a: Read the global attribute: AttributeList: Success");
+                NSLog(@"Step 4a: TH reads from the DUT the AttributeList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104325,7 +104876,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4bReadTheFeatureDependentTSTATSF00HEATAttributeInAttributeList_12()
+    CHIP_ERROR TestStep4bThReadsTheFeatureDependentTSTATSF00HEATAttributeInAttributeList_12()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104334,9 +104885,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4b: Read the Feature dependent(TSTAT.S.F00(HEAT)) attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4b: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4b: Read the Feature dependent(TSTAT.S.F00(HEAT)) attribute in AttributeList: Success");
+                NSLog(@"Step 4b: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104350,7 +104901,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4cReadTheFeatureDependentTSTATSF01COOLAttributeInAttributeList_13()
+    CHIP_ERROR TestStep4cThReadsTheFeatureDependentTSTATSF01COOLAttributeInAttributeList_13()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104359,9 +104910,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4c: Read the Feature dependent(TSTAT.S.F01(COOL)) attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4c: TH reads the Feature dependent(TSTAT.S.F01(COOL)) attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4c: Read the Feature dependent(TSTAT.S.F01(COOL)) attribute in AttributeList: Success");
+                NSLog(@"Step 4c: TH reads the Feature dependent(TSTAT.S.F01(COOL)) attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104375,7 +104926,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4dReadTheFeatureDependentTSTATSF02OCCAttributeInAttributeList_14()
+    CHIP_ERROR TestStep4dThReadsTheFeatureDependentTSTATSF02OCCAttributeInAttributeList_14()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104384,9 +104935,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4d: Read the Feature dependent(TSTAT.S.F02(OCC)) attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4d: TH reads the Feature dependent(TSTAT.S.F02(OCC)) attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4d: Read the Feature dependent(TSTAT.S.F02(OCC)) attribute in AttributeList: Success");
+                NSLog(@"Step 4d: TH reads the Feature dependent(TSTAT.S.F02(OCC)) attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104400,7 +104951,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4eReadTheFeatureDependentTSTATSF00HEATTstatsf02occAttributeInAttributeList_15()
+    CHIP_ERROR TestStep4eThReadsTheFeatureDependentTSTATSF00HEATTstatsf02occAttributeInAttributeList_15()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104409,9 +104960,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4e: Read the Feature dependent(TSTAT.S.F00(HEAT) & TSTAT.S.F02(OCC)) attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4e: TH reads the Feature dependent(TSTAT.S.F00(HEAT) & TSTAT.S.F02(OCC)) attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4e: Read the Feature dependent(TSTAT.S.F00(HEAT) & TSTAT.S.F02(OCC)) attribute in AttributeList: Success");
+                NSLog(@"Step 4e: TH reads the Feature dependent(TSTAT.S.F00(HEAT) & TSTAT.S.F02(OCC)) attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104425,7 +104976,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4fReadTheFeatureDependentTSTATSF01COOLTstatsf02occAttributeInAttributeList_16()
+    CHIP_ERROR TestStep4fThReadsTheFeatureDependentTSTATSF01COOLTstatsf02occAttributeInAttributeList_16()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104434,9 +104985,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4f: Read the Feature dependent(TSTAT.S.F01(COOL) & TSTAT.S.F02(OCC)) attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4f: TH reads the Feature dependent(TSTAT.S.F01(COOL) & TSTAT.S.F02(OCC)) attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4f: Read the Feature dependent(TSTAT.S.F01(COOL) & TSTAT.S.F02(OCC)) attribute in AttributeList: Success");
+                NSLog(@"Step 4f: TH reads the Feature dependent(TSTAT.S.F01(COOL) & TSTAT.S.F02(OCC)) attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104450,7 +105001,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4gReadTheFeatureDependentTSTATSF05AUTOAttributeInAttributeList_17()
+    CHIP_ERROR TestStep4gThReadsTheFeatureDependentTSTATSF05AUTOAttributeInAttributeList_17()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104459,9 +105010,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4g: Read the Feature dependent(TSTAT.S.F05(AUTO)) attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4g: TH reads the Feature dependent(TSTAT.S.F05(AUTO)) attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4g: Read the Feature dependent(TSTAT.S.F05(AUTO)) attribute in AttributeList: Success");
+                NSLog(@"Step 4g: TH reads the Feature dependent(TSTAT.S.F05(AUTO)) attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104477,7 +105028,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4hReadTheFeatureDependentTSTATSF03SCHAttributeInAttributeList_18()
+    CHIP_ERROR TestStep4hThReadsTheFeatureDependentTSTATSF03SCHAttributeInAttributeList_18()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104486,9 +105037,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4h: Read the Feature dependent(TSTAT.S.F03(SCH)) attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4h: TH reads the Feature dependent(TSTAT.S.F03(SCH)) attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4h: Read the Feature dependent(TSTAT.S.F03(SCH)) attribute in AttributeList: Success");
+                NSLog(@"Step 4h: TH reads the Feature dependent(TSTAT.S.F03(SCH)) attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104504,7 +105055,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4iReadTheFeatureDependentTSTATSF04SBAttributeInAttributeList_19()
+    CHIP_ERROR TestStep4iThReadsTheFeatureDependentTSTATSF04SBAttributeInAttributeList_19()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104513,9 +105064,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4i: Read the Feature dependent(TSTAT.S.F04(SB)) attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4i: TH reads the Feature dependent(TSTAT.S.F04(SB)) attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4i: Read the Feature dependent(TSTAT.S.F04(SB)) attribute in AttributeList: Success");
+                NSLog(@"Step 4i: TH reads the Feature dependent(TSTAT.S.F04(SB)) attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104531,7 +105082,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4jReadTheFeatureDependentTSTATSF04SBTstatsf02occAttributeInAttributeList_20()
+    CHIP_ERROR TestStep4jThReadsTheFeatureDependentTSTATSF04SBTstatsf02occAttributeInAttributeList_20()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104540,9 +105091,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4j: Read the Feature dependent(TSTAT.S.F04(SB) & TSTAT.S.F02(OCC)) attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4j: TH reads the Feature dependent(TSTAT.S.F04(SB) & TSTAT.S.F02(OCC)) attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4j: Read the Feature dependent(TSTAT.S.F04(SB) & TSTAT.S.F02(OCC)) attribute in AttributeList: Success");
+                NSLog(@"Step 4j: TH reads the Feature dependent(TSTAT.S.F04(SB) & TSTAT.S.F02(OCC)) attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104558,7 +105109,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4kReadTheOptionalAttributeInAttributeList_21()
+    CHIP_ERROR TestStep4kThReadsTheOptionalAttributeInAttributeList_21()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104567,9 +105118,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4k: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4k: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4k: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4k: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104583,7 +105134,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4lReadTheOptionalAttributeInAttributeList_22()
+    CHIP_ERROR TestStep4lThReadsTheOptionalAttributeInAttributeList_22()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104592,9 +105143,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4l: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4l: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4l: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4l: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104608,7 +105159,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4mReadTheOptionalAttributeInAttributeList_23()
+    CHIP_ERROR TestStep4mThReadsTheOptionalAttributeInAttributeList_23()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104617,9 +105168,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4m: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4m: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4m: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4m: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104633,7 +105184,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4nReadTheOptionalAttributeInAttributeList_24()
+    CHIP_ERROR TestStep4nThReadsTheOptionalAttributeInAttributeList_24()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104642,9 +105193,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4n: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4n: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4n: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4n: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104658,7 +105209,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4oReadTheOptionalAttributeInAttributeList_25()
+    CHIP_ERROR TestStep4oThReadsTheOptionalAttributeInAttributeList_25()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104667,9 +105218,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4o: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4o: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4o: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4o: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104683,7 +105234,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4pReadTheOptionalAttributeInAttributeList_26()
+    CHIP_ERROR TestStep4pThReadsTheOptionalAttributeInAttributeList_26()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104692,9 +105243,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4p: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4p: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4p: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4p: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104708,7 +105259,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4qReadTheOptionalAttributeInAttributeList_27()
+    CHIP_ERROR TestStep4qThReadsTheOptionalAttributeInAttributeList_27()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104717,9 +105268,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4q: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4q: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4q: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4q: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104733,7 +105284,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4rReadTheOptionalAttributeInAttributeList_28()
+    CHIP_ERROR TestStep4rThReadsTheOptionalAttributeInAttributeList_28()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104742,9 +105293,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4r: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4r: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4r: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4r: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104758,7 +105309,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4sReadTheOptionalAttributeInAttributeList_29()
+    CHIP_ERROR TestStep4sThReadsTheOptionalAttributeInAttributeList_29()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104767,9 +105318,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4s: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4s: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4s: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4s: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104783,7 +105334,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4tReadTheOptionalAttributeInAttributeList_30()
+    CHIP_ERROR TestStep4tThReadsTheOptionalAttributeInAttributeList_30()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104792,9 +105343,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4t: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4t: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4t: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4t: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104808,7 +105359,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4uReadTheOptionalAttributeInAttributeList_31()
+    CHIP_ERROR TestStep4uThReadsTheOptionalAttributeInAttributeList_31()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104817,9 +105368,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4u: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4u: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4u: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4u: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104833,7 +105384,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4xReadTheOptionalAttributeInAttributeList_32()
+    CHIP_ERROR TestStep4xThReadsTheOptionalAttributeInAttributeList_32()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104842,9 +105393,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4x: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4x: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4x: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4x: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104858,7 +105409,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5yReadTheOptionalAttributeAttributeList_33()
+    CHIP_ERROR TestStep4yThReadsTheOptionalAttributeAttributeList_33()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104867,9 +105418,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 5y: Read the optional attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4y: TH reads the optional attribute: AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 5y: Read the optional attribute: AttributeList: Success");
+                NSLog(@"Step 4y: TH reads the optional attribute: AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104883,7 +105434,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4zReadTheOptionalAttributeInAttributeList_34()
+    CHIP_ERROR TestStep4zThReadsTheOptionalAttributeInAttributeList_34()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104892,9 +105443,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4z: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4z: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4z: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4z: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104908,7 +105459,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4aReadTheOptionalAttributeInAttributeList_35()
+    CHIP_ERROR TestStep4aThReadsTheOptionalAttributeInAttributeList_35()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104917,9 +105468,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4A: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4A: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4A: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4A: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104933,7 +105484,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4bReadTheOptionalAttributeInAttributeList_36()
+    CHIP_ERROR TestStep4bThReadsTheOptionalAttributeInAttributeList_36()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104942,9 +105493,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4B: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4B: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4B: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4B: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104958,7 +105509,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4cReadTheOptionalAttributeInAttributeList_37()
+    CHIP_ERROR TestStep4cThReadsTheOptionalAttributeInAttributeList_37()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104967,9 +105518,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4C: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4C: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4C: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4C: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -104983,7 +105534,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5dReadTheOptionalAttributeAttributeList_38()
+    CHIP_ERROR TestStep4dThReadsTheOptionalAttributeAttributeList_38()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -104992,9 +105543,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 5D: Read the optional attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4D: TH reads the optional attribute: AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 5D: Read the optional attribute: AttributeList: Success");
+                NSLog(@"Step 4D: TH reads the optional attribute: AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105008,7 +105559,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4eReadTheOptionalAttributeInAttributeList_39()
+    CHIP_ERROR TestStep4eThReadsTheOptionalAttributeInAttributeList_39()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105017,9 +105568,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4E: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4E: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4E: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4E: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105033,7 +105584,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4fReadTheOptionalAttributeInAttributeList_40()
+    CHIP_ERROR TestStep4fThReadsTheOptionalAttributeInAttributeList_40()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105042,9 +105593,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4F: Read the optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4F: TH reads the optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4F: Read the optional attribute in AttributeList: Success");
+                NSLog(@"Step 4F: TH reads the optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105058,7 +105609,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5gReadTheOptionalAttributeAttributeList_41()
+    CHIP_ERROR TestStep4gThReadsTheOptionalAttributeAttributeList_41()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105067,9 +105618,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 5G: Read the optional attribute: AttributeList: Error: %@", err);
+                NSLog(@"Step 4g: TH reads the optional attribute: AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 5G: Read the optional attribute: AttributeList: Success");
+                NSLog(@"Step 4g: TH reads the optional attribute: AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105083,7 +105634,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4hReadTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_42()
+    CHIP_ERROR TestStep4hThReadsTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_42()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105092,9 +105643,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4H: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4H: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4H: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Success");
+                NSLog(@"Step 4H: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105108,7 +105659,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4iReadTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_43()
+    CHIP_ERROR TestStep4iThReadsTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_43()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105117,9 +105668,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4I: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4I: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4I: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Success");
+                NSLog(@"Step 4I: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105133,7 +105684,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4jReadTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_44()
+    CHIP_ERROR TestStep4jThReadsTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_44()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105142,9 +105693,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4J: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4J: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4J: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Success");
+                NSLog(@"Step 4J: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105158,7 +105709,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4kReadTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_45()
+    CHIP_ERROR TestStep4kThReadsTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_45()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105167,9 +105718,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4K: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4K: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4K: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Success");
+                NSLog(@"Step 4K: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105183,7 +105734,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4lReadTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_46()
+    CHIP_ERROR TestStep4lThReadsTheFeatureDependentTSTATSF00HEATOptionalAttributeInAttributeList_46()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105192,9 +105743,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4L: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4L: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4L: Read the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Success");
+                NSLog(@"Step 4L: TH reads the Feature dependent(TSTAT.S.F00(HEAT)) optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105208,7 +105759,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4mReadTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_47()
+    CHIP_ERROR TestStep4mThReadsTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_47()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105217,9 +105768,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4M: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4M: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4M: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Success");
+                NSLog(@"Step 4M: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105233,7 +105784,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4nReadTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_48()
+    CHIP_ERROR TestStep4nThReadsTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_48()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105242,9 +105793,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4N: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4N: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4N: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Success");
+                NSLog(@"Step 4N: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105258,7 +105809,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4oReadTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_49()
+    CHIP_ERROR TestStep4oThReadsTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_49()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105267,9 +105818,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4O: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4O: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4O: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Success");
+                NSLog(@"Step 4O: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105283,7 +105834,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4pReadTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_50()
+    CHIP_ERROR TestStep4pThReadsTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_50()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105292,9 +105843,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4P: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4P: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4P: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Success");
+                NSLog(@"Step 4P: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105308,7 +105859,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4qReadTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_51()
+    CHIP_ERROR TestStep4qThReadsTheFeatureDependentTSTATSF01COOLOptionalAttributeInAttributeList_51()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105317,9 +105868,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4Q: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4Q: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4Q: Read the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Success");
+                NSLog(@"Step 4Q: TH reads the Feature dependent(TSTAT.S.F01(COOL)) optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105333,7 +105884,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4rReadTheFeatureDependentTSTATSF05AUTOOptionalAttributeInAttributeList_52()
+    CHIP_ERROR TestStep4rThReadsTheFeatureDependentTSTATSF05AUTOOptionalAttributeInAttributeList_52()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105342,9 +105893,9 @@
 
         [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4R: Read the Feature dependent(TSTAT.S.F05(AUTO)) optional attribute in AttributeList: Error: %@", err);
+                NSLog(@"Step 4R: TH reads the Feature dependent(TSTAT.S.F05(AUTO)) optional attribute in AttributeList: Error: %@", err);
             } else {
-                NSLog(@"Step 4R: Read the Feature dependent(TSTAT.S.F05(AUTO)) optional attribute in AttributeList: Success");
+                NSLog(@"Step 4R: TH reads the Feature dependent(TSTAT.S.F05(AUTO)) optional attribute in AttributeList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105358,7 +105909,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5aReadTheMandatoryCommandsInAcceptedCommandList_53()
+    CHIP_ERROR TestStep6aThReadsFromTheDutTheAcceptedCommandListAttribute_54()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105367,9 +105918,9 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 5a: Read the mandatory commands in AcceptedCommandList: Error: %@", err);
+                NSLog(@"Step 6a: TH reads from the DUT the AcceptedCommandList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 5a: Read the mandatory commands in AcceptedCommandList: Success");
+                NSLog(@"Step 6a: TH reads from the DUT the AcceptedCommandList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105383,7 +105934,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5bReadFeatureDependentTSTATSF03SCHCommandsInAcceptedCommandList_54()
+    CHIP_ERROR TestStep6bThReadsFeatureDependentTSTATSF03SCHCommandsInAcceptedCommandList_55()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105392,9 +105943,9 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 5b: Read Feature dependent(TSTAT.S.F03(SCH)) commands in AcceptedCommandList: Error: %@", err);
+                NSLog(@"Step 6b: TH reads Feature dependent(TSTAT.S.F03(SCH)) commands in AcceptedCommandList: Error: %@", err);
             } else {
-                NSLog(@"Step 5b: Read Feature dependent(TSTAT.S.F03(SCH)) commands in AcceptedCommandList: Success");
+                NSLog(@"Step 6b: TH reads Feature dependent(TSTAT.S.F03(SCH)) commands in AcceptedCommandList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105410,7 +105961,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5cReadTheOptionalGetRelayStatusLogCommandInAcceptedCommandList_55()
+    CHIP_ERROR TestStep6cThReadsTheOptionalGetRelayStatusLogCommandInAcceptedCommandList_56()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105419,9 +105970,9 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 5c: Read the optional (GetRelayStatusLog) command in AcceptedCommandList: Error: %@", err);
+                NSLog(@"Step 6c: TH reads the optional (GetRelayStatusLog) command in AcceptedCommandList: Error: %@", err);
             } else {
-                NSLog(@"Step 5c: Read the optional (GetRelayStatusLog) command in AcceptedCommandList: Success");
+                NSLog(@"Step 6c: TH reads the optional (GetRelayStatusLog) command in AcceptedCommandList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105435,7 +105986,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6aReadTheGlobalAttributeGeneratedCommandList_56()
+    CHIP_ERROR TestStep7aThReadsFromTheDutTheGeneratedCommandListAttribute_57()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105444,9 +105995,9 @@
 
         [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 6a: Read the global attribute: GeneratedCommandList: Error: %@", err);
+                NSLog(@"Step 7a: TH reads from the DUT the GeneratedCommandList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 6a: Read the global attribute: GeneratedCommandList: Success");
+                NSLog(@"Step 7a: TH reads from the DUT the GeneratedCommandList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105463,7 +106014,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6bReadFeatureDependentTSTATSF03SCHCommandsInGeneratedCommandList_57()
+    CHIP_ERROR TestStep7bThReadsFeatureDependentTSTATSF03SCHCommandsInGeneratedCommandList_58()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105472,9 +106023,9 @@
 
         [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 6b: Read Feature dependent(TSTAT.S.F03(SCH)) commands in GeneratedCommandList: Error: %@", err);
+                NSLog(@"Step 7b: TH reads Feature dependent(TSTAT.S.F03(SCH)) commands in GeneratedCommandList: Error: %@", err);
             } else {
-                NSLog(@"Step 6b: Read Feature dependent(TSTAT.S.F03(SCH)) commands in GeneratedCommandList: Success");
+                NSLog(@"Step 7b: TH reads Feature dependent(TSTAT.S.F03(SCH)) commands in GeneratedCommandList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105488,7 +106039,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6cReadOptionalCommandGetRelayStatusLogResponseInGeneratedCommandList_58()
+    CHIP_ERROR TestStep7cThReadsOptionalCommandGetRelayStatusLogResponseInGeneratedCommandList_59()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105497,9 +106048,9 @@
 
         [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 6c: Read optional command (GetRelayStatusLogResponse) in GeneratedCommandList: Error: %@", err);
+                NSLog(@"Step 7c: TH reads optional command (GetRelayStatusLogResponse) in GeneratedCommandList: Error: %@", err);
             } else {
-                NSLog(@"Step 6c: Read optional command (GetRelayStatusLogResponse) in GeneratedCommandList: Success");
+                NSLog(@"Step 7c: TH reads optional command (GetRelayStatusLogResponse) in GeneratedCommandList: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105591,21 +106142,21 @@
             err = TestStep4bThReadsOptionalAttributeScheduleProgrammingVisibilityInAttributeList_5();
             break;
         case 6:
-            ChipLogProgress(chipTool, " ***** Test Step 6 : Step 5: TH reads from the DUT the AcceptedCommandList attribute.\n");
-            err = TestStep5ThReadsFromTheDutTheAcceptedCommandListAttribute_6();
-            break;
-        case 7:
-            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 6: TH reads from the DUT the GeneratedCommandList attribute.\n");
-            err = TestStep6ThReadsFromTheDutTheGeneratedCommandListAttribute_7();
-            break;
-        case 8:
-            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 7: TH reads from the DUT the EventList attribute.\n");
+            ChipLogProgress(chipTool, " ***** Test Step 6 : Step 5: TH reads from the DUT the EventList attribute.\n");
             if (ShouldSkip("PICS_EVENT_LIST_ENABLED")) {
                 NextTest();
                 return;
             }
             NextTest();
             return;
+        case 7:
+            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 6: TH reads from the DUT the AcceptedCommandList attribute.\n");
+            err = TestStep6ThReadsFromTheDutTheAcceptedCommandListAttribute_7();
+            break;
+        case 8:
+            ChipLogProgress(chipTool, " ***** Test Step 8 : Step 7: TH reads from the DUT the GeneratedCommandList attribute.\n");
+            err = TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_8();
+            break;
         }
 
         if (CHIP_NO_ERROR != err) {
@@ -105813,7 +106364,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5ThReadsFromTheDutTheAcceptedCommandListAttribute_6()
+    CHIP_ERROR TestStep6ThReadsFromTheDutTheAcceptedCommandListAttribute_7()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105822,9 +106373,9 @@
 
         [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 5: TH reads from the DUT the AcceptedCommandList attribute.: Error: %@", err);
+                NSLog(@"Step 6: TH reads from the DUT the AcceptedCommandList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 5: TH reads from the DUT the AcceptedCommandList attribute.: Success");
+                NSLog(@"Step 6: TH reads from the DUT the AcceptedCommandList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -105841,7 +106392,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6ThReadsFromTheDutTheGeneratedCommandListAttribute_7()
+    CHIP_ERROR TestStep7ThReadsFromTheDutTheGeneratedCommandListAttribute_8()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -105850,9 +106401,9 @@
 
         [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 6: TH reads from the DUT the GeneratedCommandList attribute.: Error: %@", err);
+                NSLog(@"Step 7: TH reads from the DUT the GeneratedCommandList attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 6: TH reads from the DUT the GeneratedCommandList attribute.: Success");
+                NSLog(@"Step 7: TH reads from the DUT the GeneratedCommandList attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -115230,128 +115781,88 @@
             err = TestStep2eThWaitsFor15SecondsMovementsOnTheDut_11();
             break;
         case 12:
-            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 3a1: TH reads OperationalStatus attribute's bit 0..1\n");
+            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 3a: TH reads OperationalStatus attribute from DUT\n");
             if (ShouldSkip("WNCV.S.A000a")) {
                 NextTest();
                 return;
             }
-            err = TestStep3a1ThReadsOperationalStatusAttributesBit01_12();
+            err = TestStep3aThReadsOperationalStatusAttributeFromDut_12();
             break;
         case 13:
-            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 3a2: Write attribute BITMAP8 with OperationalStatusValue to do the bits checks in upcoming OperationalStatus read steps.\n");
-            if (ShouldSkip("WNCV.S.A000a")) {
-                NextTest();
-                return;
-            }
-            err = TestStep3a2WriteAttributeBitmap8WithOperationalStatusValueToDoTheBitsChecksInUpcomingOperationalStatusReadSteps_13();
+            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 3a: DUT updates its attributes\n");
+            err = TestStep3aDutUpdatesItsAttributes_13();
             break;
         case 14:
-            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 3a3: TH checks OperationalStatus value bit 2..3 (WNCV.S.F00(LF))\n");
-            if (ShouldSkip("WNCV.S.A000a && WNCV.S.F00")) {
-                NextTest();
-                return;
-            }
-            err = TestStep3a3ThChecksOperationalStatusValueBit23Wncvsf00lf_14();
-            break;
-        case 15:
-            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 3a4: TH check OperationalStatus value bit 2..3 (WNCV.S.F00(LF))\n");
-            if (ShouldSkip("WNCV.S.A000a && !WNCV.S.F00")) {
-                NextTest();
-                return;
-            }
-            err = TestStep3a4ThCheckOperationalStatusValueBit23Wncvsf00lf_15();
-            break;
-        case 16:
-            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 3a5: TH checks OperationalStatus value bit 4..5 (WNCV.S.F01(TL))\n");
-            if (ShouldSkip("WNCV.S.A000a && WNCV.S.F01")) {
-                NextTest();
-                return;
-            }
-            err = TestStep3a5ThChecksOperationalStatusValueBit45Wncvsf01tl_16();
-            break;
-        case 17:
-            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 3a6: TH checks OperationalStatus value bit 4..5 (WNCV.S.F01(TL))\n");
-            if (ShouldSkip("WNCV.S.A000a && !WNCV.S.F01")) {
-                NextTest();
-                return;
-            }
-            err = TestStep3a6ThChecksOperationalStatusValueBit45Wncvsf01tl_17();
-            break;
-        case 18:
-            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 3a7: DUT updates its attributes\n");
-            err = TestStep3a7DutUpdatesItsAttributes_18();
-            break;
-        case 19:
-            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 3b: If (PA & LF) TH reads CurrentPositionLiftPercent100ths attribute from DUT\n");
+            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 3b: If (PA & LF) TH reads CurrentPositionLiftPercent100ths attribute from DUT\n");
             if (ShouldSkip("WNCV.S.F00 && WNCV.S.F02 && WNCV.S.A000e")) {
                 NextTest();
                 return;
             }
-            err = TestStep3bIfPaLfThReadsCurrentPositionLiftPercent100thsAttributeFromDut_19();
+            err = TestStep3bIfPaLfThReadsCurrentPositionLiftPercent100thsAttributeFromDut_14();
             break;
-        case 20:
-            ChipLogProgress(chipTool, " ***** Test Step 20 : Step 3c: If (PA & LF) TH reads CurrentPositionLiftPercentage optional attribute from DUT\n");
+        case 15:
+            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 3c: If (PA & LF) TH reads CurrentPositionLiftPercentage optional attribute from DUT\n");
             if (ShouldSkip("WNCV.S.F00 && WNCV.S.F02 && WNCV.S.A0008")) {
                 NextTest();
                 return;
             }
-            err = TestStep3cIfPaLfThReadsCurrentPositionLiftPercentageOptionalAttributeFromDut_20();
+            err = TestStep3cIfPaLfThReadsCurrentPositionLiftPercentageOptionalAttributeFromDut_15();
             break;
-        case 21:
-            ChipLogProgress(chipTool, " ***** Test Step 21 : Step 3d: If (PA & TL) TH reads CurrentPositionTiltPercent100ths attribute from DUT\n");
+        case 16:
+            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 3d: If (PA & TL) TH reads CurrentPositionTiltPercent100ths attribute from DUT\n");
             if (ShouldSkip("WNCV.S.F01 && WNCV.S.F04 && WNCV.S.A000f")) {
                 NextTest();
                 return;
             }
-            err = TestStep3dIfPaTlThReadsCurrentPositionTiltPercent100thsAttributeFromDut_21();
+            err = TestStep3dIfPaTlThReadsCurrentPositionTiltPercent100thsAttributeFromDut_16();
             break;
-        case 22:
-            ChipLogProgress(chipTool, " ***** Test Step 22 : Step 3e: If (PA & LF) TH reads CurrentPositionTiltPercentage optional attribute from DUT\n");
+        case 17:
+            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 3e: If (PA & LF) TH reads CurrentPositionTiltPercentage optional attribute from DUT\n");
             if (ShouldSkip("WNCV.S.F01 && WNCV.S.F04 && WNCV.S.A0009")) {
                 NextTest();
                 return;
             }
-            err = TestStep3eIfPaLfThReadsCurrentPositionTiltPercentageOptionalAttributeFromDut_22();
+            err = TestStep3eIfPaLfThReadsCurrentPositionTiltPercentageOptionalAttributeFromDut_17();
             break;
-        case 23:
-            ChipLogProgress(chipTool, " ***** Test Step 23 : Step 4a: TH sends a StopMotion command to DUT\n");
+        case 18:
+            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 4a: TH sends a StopMotion command to DUT\n");
             if (ShouldSkip("WNCV.S.C02.Rsp")) {
                 NextTest();
                 return;
             }
-            err = TestStep4aThSendsAStopMotionCommandToDut_23();
+            err = TestStep4aThSendsAStopMotionCommandToDut_18();
             break;
-        case 24:
-            ChipLogProgress(chipTool, " ***** Test Step 24 : Step 4b: TH waits for 1-5 seconds end of motion(s) on the DUT\n");
-            err = TestStep4bThWaitsFor15SecondsEndOfMotionsOnTheDut_24();
+        case 19:
+            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 4b: TH waits for 1-5 seconds end of motion(s) on the DUT\n");
+            err = TestStep4bThWaitsFor15SecondsEndOfMotionsOnTheDut_19();
             break;
-        case 25:
-            ChipLogProgress(chipTool, " ***** Test Step 25 : Step 4c: TH reads OperationalStatus attribute from DUT\n");
+        case 20:
+            ChipLogProgress(chipTool, " ***** Test Step 20 : Step 4c: TH reads OperationalStatus attribute from DUT\n");
             if (ShouldSkip("WNCV.S.A000a")) {
                 NextTest();
                 return;
             }
-            err = TestStep4cThReadsOperationalStatusAttributeFromDut_25();
+            err = TestStep4cThReadsOperationalStatusAttributeFromDut_20();
             break;
-        case 26:
-            ChipLogProgress(chipTool, " ***** Test Step 26 : Step 5a: TH waits for 100-1000 ms\n");
-            err = TestStep5aThWaitsFor1001000Ms_26();
+        case 21:
+            ChipLogProgress(chipTool, " ***** Test Step 21 : Step 5a: TH waits for 100-1000 ms\n");
+            err = TestStep5aThWaitsFor1001000Ms_21();
             break;
-        case 27:
-            ChipLogProgress(chipTool, " ***** Test Step 27 : Step 5b: If (PA & LF) TH reads TargetPositionLiftPercent100ths attribute from DUT\n");
+        case 22:
+            ChipLogProgress(chipTool, " ***** Test Step 22 : Step 5b: If (PA & LF) TH reads TargetPositionLiftPercent100ths attribute from DUT\n");
             if (ShouldSkip("WNCV.S.F00 && WNCV.S.F02 && WNCV.S.A000b")) {
                 NextTest();
                 return;
             }
-            err = TestStep5bIfPaLfThReadsTargetPositionLiftPercent100thsAttributeFromDut_27();
+            err = TestStep5bIfPaLfThReadsTargetPositionLiftPercent100thsAttributeFromDut_22();
             break;
-        case 28:
-            ChipLogProgress(chipTool, " ***** Test Step 28 : Step 5c: If (PA & TL) TH reads TargetPositionTiltPercent100ths attribute from DUT\n");
+        case 23:
+            ChipLogProgress(chipTool, " ***** Test Step 23 : Step 5c: If (PA & TL) TH reads TargetPositionTiltPercent100ths attribute from DUT\n");
             if (ShouldSkip("WNCV.S.F01 && WNCV.S.F04 && WNCV.S.A000c")) {
                 NextTest();
                 return;
             }
-            err = TestStep5cIfPaTlThReadsTargetPositionTiltPercent100thsAttributeFromDut_28();
+            err = TestStep5cIfPaTlThReadsTargetPositionTiltPercent100thsAttributeFromDut_23();
             break;
         }
 
@@ -115436,21 +115947,6 @@
         case 23:
             VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
             break;
-        case 24:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 25:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 26:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 27:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 28:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
         }
 
         // Go on to the next test.
@@ -115461,7 +115957,7 @@
 
 private:
     std::atomic_uint16_t mTestIndex;
-    const uint16_t mTestCount = 29;
+    const uint16_t mTestCount = 24;
 
     chip::Optional<chip::NodeId> mNodeId;
     chip::Optional<chip::CharSpan> mCluster;
@@ -115508,7 +116004,7 @@
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value;
-        value.ms = mStep1bWaitTime.HasValue() ? mStep1bWaitTime.Value() : 10000UL;
+        value.ms = mStep1bWaitTime.HasValue() ? mStep1bWaitTime.Value() : 5000UL;
         return WaitForMs("alpha", value);
     }
 
@@ -115655,7 +116151,7 @@
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value;
-        value.ms = mStep2bWaitTime.HasValue() ? mStep2bWaitTime.Value() : 500UL;
+        value.ms = mStep2bWaitTime.HasValue() ? mStep2bWaitTime.Value() : 200UL;
         return WaitForMs("alpha", value);
     }
 
@@ -115722,9 +116218,8 @@
         value.ms = mStep2eWaitTime.HasValue() ? mStep2eWaitTime.Value() : 1000UL;
         return WaitForMs("alpha", value);
     }
-    NSNumber * _Nonnull OperationalStatusValue;
 
-    CHIP_ERROR TestStep3a1ThReadsOperationalStatusAttributesBit01_12()
+    CHIP_ERROR TestStep3aThReadsOperationalStatusAttributeFromDut_12()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -115733,162 +116228,21 @@
 
         [cluster readAttributeOperationalStatusWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3a1: TH reads OperationalStatus attribute's bit 0..1: Error: %@", err);
+                NSLog(@"Step 3a: TH reads OperationalStatus attribute from DUT: Error: %@", err);
             } else {
-                NSLog(@"Step 3a1: TH reads OperationalStatus attribute's bit 0..1: Success");
+                NSLog(@"Step 3a: TH reads OperationalStatus attribute from DUT: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
 
             VerifyOrReturn(CheckConstraintType("operationalStatus", "bitmap8", "bitmap8"));
-            {
-                OperationalStatusValue = value;
-            }
-
             NextTest();
         }];
 
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3a2WriteAttributeBitmap8WithOperationalStatusValueToDoTheBitsChecksInUpcomingOperationalStatusReadSteps_13()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterUnitTesting alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        id bitmap8Argument;
-        bitmap8Argument =
-            [OperationalStatusValue copy];
-        [cluster writeAttributeBitmap8WithValue:bitmap8Argument completion:^(NSError * _Nullable err) {
-            if (err != nil) {
-                NSLog(@"Step 3a2: Write attribute BITMAP8 with OperationalStatusValue to do the bits checks in upcoming OperationalStatus read steps.: Error: %@", err);
-            } else {
-                NSLog(@"Step 3a2: Write attribute BITMAP8 with OperationalStatusValue to do the bits checks in upcoming OperationalStatus read steps.: Success");
-            }
-
-            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-            NextTest();
-        }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestStep3a3ThChecksOperationalStatusValueBit23Wncvsf00lf_14()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterUnitTesting alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        [cluster readAttributeBitmap8WithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
-            if (err != nil) {
-                NSLog(@"Step 3a3: TH checks OperationalStatus value bit 2..3 (WNCV.S.F00(LF)): Error: %@", err);
-            } else {
-                NSLog(@"Step 3a3: TH checks OperationalStatus value bit 2..3 (WNCV.S.F00(LF)): Success");
-            }
-
-            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-            {
-                id actualValue = value;
-                VerifyOrReturn(CheckValue("bitmap8", actualValue, OperationalStatusValue));
-            }
-
-            VerifyOrReturn(CheckConstraintType("bitmap8", "bitmap8", "bitmap8"));
-            NextTest();
-        }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestStep3a4ThCheckOperationalStatusValueBit23Wncvsf00lf_15()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterUnitTesting alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        [cluster readAttributeBitmap8WithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
-            if (err != nil) {
-                NSLog(@"Step 3a4: TH check OperationalStatus value bit 2..3 (WNCV.S.F00(LF)): Error: %@", err);
-            } else {
-                NSLog(@"Step 3a4: TH check OperationalStatus value bit 2..3 (WNCV.S.F00(LF)): Success");
-            }
-
-            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-            {
-                id actualValue = value;
-                VerifyOrReturn(CheckValue("bitmap8", actualValue, OperationalStatusValue));
-            }
-
-            VerifyOrReturn(CheckConstraintType("bitmap8", "bitmap8", "bitmap8"));
-            NextTest();
-        }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestStep3a5ThChecksOperationalStatusValueBit45Wncvsf01tl_16()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterUnitTesting alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        [cluster readAttributeBitmap8WithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
-            if (err != nil) {
-                NSLog(@"Step 3a5: TH checks OperationalStatus value bit 4..5 (WNCV.S.F01(TL)): Error: %@", err);
-            } else {
-                NSLog(@"Step 3a5: TH checks OperationalStatus value bit 4..5 (WNCV.S.F01(TL)): Success");
-            }
-
-            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-            {
-                id actualValue = value;
-                VerifyOrReturn(CheckValue("bitmap8", actualValue, OperationalStatusValue));
-            }
-
-            VerifyOrReturn(CheckConstraintType("bitmap8", "bitmap8", "bitmap8"));
-            NextTest();
-        }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestStep3a6ThChecksOperationalStatusValueBit45Wncvsf01tl_17()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterUnitTesting alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        [cluster readAttributeBitmap8WithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
-            if (err != nil) {
-                NSLog(@"Step 3a6: TH checks OperationalStatus value bit 4..5 (WNCV.S.F01(TL)): Error: %@", err);
-            } else {
-                NSLog(@"Step 3a6: TH checks OperationalStatus value bit 4..5 (WNCV.S.F01(TL)): Success");
-            }
-
-            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-            {
-                id actualValue = value;
-                VerifyOrReturn(CheckValue("bitmap8", actualValue, OperationalStatusValue));
-            }
-
-            VerifyOrReturn(CheckConstraintType("bitmap8", "bitmap8", "bitmap8"));
-            NextTest();
-        }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestStep3a7DutUpdatesItsAttributes_18()
+    CHIP_ERROR TestStep3aDutUpdatesItsAttributes_13()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value;
@@ -115896,7 +116250,7 @@
         return WaitForMs("alpha", value);
     }
 
-    CHIP_ERROR TestStep3bIfPaLfThReadsCurrentPositionLiftPercent100thsAttributeFromDut_19()
+    CHIP_ERROR TestStep3bIfPaLfThReadsCurrentPositionLiftPercent100thsAttributeFromDut_14()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -115925,7 +116279,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3cIfPaLfThReadsCurrentPositionLiftPercentageOptionalAttributeFromDut_20()
+    CHIP_ERROR TestStep3cIfPaLfThReadsCurrentPositionLiftPercentageOptionalAttributeFromDut_15()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -115954,7 +116308,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3dIfPaTlThReadsCurrentPositionTiltPercent100thsAttributeFromDut_21()
+    CHIP_ERROR TestStep3dIfPaTlThReadsCurrentPositionTiltPercent100thsAttributeFromDut_16()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -115983,7 +116337,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3eIfPaLfThReadsCurrentPositionTiltPercentageOptionalAttributeFromDut_22()
+    CHIP_ERROR TestStep3eIfPaLfThReadsCurrentPositionTiltPercentageOptionalAttributeFromDut_17()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -116012,7 +116366,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4aThSendsAStopMotionCommandToDut_23()
+    CHIP_ERROR TestStep4aThSendsAStopMotionCommandToDut_18()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -116035,7 +116389,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4bThWaitsFor15SecondsEndOfMotionsOnTheDut_24()
+    CHIP_ERROR TestStep4bThWaitsFor15SecondsEndOfMotionsOnTheDut_19()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value;
@@ -116043,7 +116397,7 @@
         return WaitForMs("alpha", value);
     }
 
-    CHIP_ERROR TestStep4cThReadsOperationalStatusAttributeFromDut_25()
+    CHIP_ERROR TestStep4cThReadsOperationalStatusAttributeFromDut_20()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -116070,7 +116424,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5aThWaitsFor1001000Ms_26()
+    CHIP_ERROR TestStep5aThWaitsFor1001000Ms_21()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value;
@@ -116078,7 +116432,7 @@
         return WaitForMs("alpha", value);
     }
 
-    CHIP_ERROR TestStep5bIfPaLfThReadsTargetPositionLiftPercent100thsAttributeFromDut_27()
+    CHIP_ERROR TestStep5bIfPaLfThReadsTargetPositionLiftPercent100thsAttributeFromDut_22()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -116107,7 +116461,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5cIfPaTlThReadsTargetPositionTiltPercent100thsAttributeFromDut_28()
+    CHIP_ERROR TestStep5cIfPaTlThReadsTargetPositionTiltPercent100thsAttributeFromDut_23()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -116263,128 +116617,88 @@
             err = TestStep2eThLeaveTheDeviceMovingFor2Seconds_11();
             break;
         case 12:
-            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 3a1: TH reads OperationalStatus attribute's bit 0..1\n");
+            ChipLogProgress(chipTool, " ***** Test Step 12 : Step 3a: TH reads OperationalStatus attribute from DUT\n");
             if (ShouldSkip("WNCV.S.A000a")) {
                 NextTest();
                 return;
             }
-            err = TestStep3a1ThReadsOperationalStatusAttributesBit01_12();
+            err = TestStep3aThReadsOperationalStatusAttributeFromDut_12();
             break;
         case 13:
-            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 3a2: Write attribute BITMAP8 with OperationalStatusValue to do the bits checks in upcoming OperationalStatus read steps.\n");
-            if (ShouldSkip("WNCV.S.A000a")) {
-                NextTest();
-                return;
-            }
-            err = TestStep3a2WriteAttributeBitmap8WithOperationalStatusValueToDoTheBitsChecksInUpcomingOperationalStatusReadSteps_13();
+            ChipLogProgress(chipTool, " ***** Test Step 13 : Step 3a: DUT updates its attributes\n");
+            err = TestStep3aDutUpdatesItsAttributes_13();
             break;
         case 14:
-            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 3a3: TH checks OperationalStatus value bit 2..3 (WNCV.S.F00(LF))\n");
-            if (ShouldSkip("WNCV.S.A000a && WNCV.S.F00")) {
-                NextTest();
-                return;
-            }
-            err = TestStep3a3ThChecksOperationalStatusValueBit23Wncvsf00lf_14();
-            break;
-        case 15:
-            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 3a4: TH checks OperationalStatus value bit 2..3 (WNCV.S.F00(LF))\n");
-            if (ShouldSkip("WNCV.S.A000a && !WNCV.S.F00")) {
-                NextTest();
-                return;
-            }
-            err = TestStep3a4ThChecksOperationalStatusValueBit23Wncvsf00lf_15();
-            break;
-        case 16:
-            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 3a5: TH checks OperationalStatus value bit 4..5 (WNCV.S.F01(TL))\n");
-            if (ShouldSkip("WNCV.S.A000a && WNCV.S.F01")) {
-                NextTest();
-                return;
-            }
-            err = TestStep3a5ThChecksOperationalStatusValueBit45Wncvsf01tl_16();
-            break;
-        case 17:
-            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 3a6: TH chesks OperationalStatus value bit 4..5 (WNCV.S.F01(TL))\n");
-            if (ShouldSkip("WNCV.S.A000a && !WNCV.S.F01")) {
-                NextTest();
-                return;
-            }
-            err = TestStep3a6ThChesksOperationalStatusValueBit45Wncvsf01tl_17();
-            break;
-        case 18:
-            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 3a7: DUT updates its attributes\n");
-            err = TestStep3a7DutUpdatesItsAttributes_18();
-            break;
-        case 19:
-            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 3b: If (PA & LF) TH reads CurrentPositionLiftPercent100ths attribute from DUT\n");
+            ChipLogProgress(chipTool, " ***** Test Step 14 : Step 3b: If (PA & LF) TH reads CurrentPositionLiftPercent100ths attribute from DUT\n");
             if (ShouldSkip("WNCV.S.F00 && WNCV.S.F02 && WNCV.S.A000e")) {
                 NextTest();
                 return;
             }
-            err = TestStep3bIfPaLfThReadsCurrentPositionLiftPercent100thsAttributeFromDut_19();
+            err = TestStep3bIfPaLfThReadsCurrentPositionLiftPercent100thsAttributeFromDut_14();
             break;
-        case 20:
-            ChipLogProgress(chipTool, " ***** Test Step 20 : Step 3c: If (PA & LF) TH reads CurrentPositionLiftPercentage optional attribute from DUT\n");
+        case 15:
+            ChipLogProgress(chipTool, " ***** Test Step 15 : Step 3c: If (PA & LF) TH reads CurrentPositionLiftPercentage optional attribute from DUT\n");
             if (ShouldSkip("WNCV.S.F00 && WNCV.S.F02 && WNCV.S.A0008")) {
                 NextTest();
                 return;
             }
-            err = TestStep3cIfPaLfThReadsCurrentPositionLiftPercentageOptionalAttributeFromDut_20();
+            err = TestStep3cIfPaLfThReadsCurrentPositionLiftPercentageOptionalAttributeFromDut_15();
             break;
-        case 21:
-            ChipLogProgress(chipTool, " ***** Test Step 21 : Step 3d: If (PA & TL) TH reads CurrentPositionTiltPercent100ths attribute from DUT\n");
+        case 16:
+            ChipLogProgress(chipTool, " ***** Test Step 16 : Step 3d: If (PA & TL) TH reads CurrentPositionTiltPercent100ths attribute from DUT\n");
             if (ShouldSkip("WNCV.S.F01 && WNCV.S.F04 && WNCV.S.A000f")) {
                 NextTest();
                 return;
             }
-            err = TestStep3dIfPaTlThReadsCurrentPositionTiltPercent100thsAttributeFromDut_21();
+            err = TestStep3dIfPaTlThReadsCurrentPositionTiltPercent100thsAttributeFromDut_16();
             break;
-        case 22:
-            ChipLogProgress(chipTool, " ***** Test Step 22 : Step 3e: If (PA & LF) TH reads CurrentPositionTiltPercentage optional attribute from DUT\n");
+        case 17:
+            ChipLogProgress(chipTool, " ***** Test Step 17 : Step 3e: If (PA & LF) TH reads CurrentPositionTiltPercentage optional attribute from DUT\n");
             if (ShouldSkip("WNCV.S.F01 && WNCV.S.F04 && WNCV.S.A0009")) {
                 NextTest();
                 return;
             }
-            err = TestStep3eIfPaLfThReadsCurrentPositionTiltPercentageOptionalAttributeFromDut_22();
+            err = TestStep3eIfPaLfThReadsCurrentPositionTiltPercentageOptionalAttributeFromDut_17();
             break;
-        case 23:
-            ChipLogProgress(chipTool, " ***** Test Step 23 : Step 4a: TH sends a StopMotion command to DUT\n");
+        case 18:
+            ChipLogProgress(chipTool, " ***** Test Step 18 : Step 4a: TH sends a StopMotion command to DUT\n");
             if (ShouldSkip("WNCV.S.C02.Rsp")) {
                 NextTest();
                 return;
             }
-            err = TestStep4aThSendsAStopMotionCommandToDut_23();
+            err = TestStep4aThSendsAStopMotionCommandToDut_18();
             break;
-        case 24:
-            ChipLogProgress(chipTool, " ***** Test Step 24 : Step 4b: TH waits for 1-5 seconds end of motion(s) on the DUT\n");
-            err = TestStep4bThWaitsFor15SecondsEndOfMotionsOnTheDut_24();
+        case 19:
+            ChipLogProgress(chipTool, " ***** Test Step 19 : Step 4b: TH waits for 1-5 seconds end of motion(s) on the DUT\n");
+            err = TestStep4bThWaitsFor15SecondsEndOfMotionsOnTheDut_19();
             break;
-        case 25:
-            ChipLogProgress(chipTool, " ***** Test Step 25 : Step 4c: TH reads OperationalStatus attribute from DUT\n");
+        case 20:
+            ChipLogProgress(chipTool, " ***** Test Step 20 : Step 4c: TH reads OperationalStatus attribute from DUT\n");
             if (ShouldSkip("WNCV.S.A000a")) {
                 NextTest();
                 return;
             }
-            err = TestStep4cThReadsOperationalStatusAttributeFromDut_25();
+            err = TestStep4cThReadsOperationalStatusAttributeFromDut_20();
             break;
-        case 26:
-            ChipLogProgress(chipTool, " ***** Test Step 26 : Step 5a: TH waits for 100-1000 ms\n");
-            err = TestStep5aThWaitsFor1001000Ms_26();
+        case 21:
+            ChipLogProgress(chipTool, " ***** Test Step 21 : Step 5a: TH waits for 100-1000 ms\n");
+            err = TestStep5aThWaitsFor1001000Ms_21();
             break;
-        case 27:
-            ChipLogProgress(chipTool, " ***** Test Step 27 : Step 5b: If (PA & LF) TH reads TargetPositionLiftPercent100ths attribute from DUT\n");
+        case 22:
+            ChipLogProgress(chipTool, " ***** Test Step 22 : Step 5b: If (PA & LF) TH reads TargetPositionLiftPercent100ths attribute from DUT\n");
             if (ShouldSkip("WNCV.S.F00 && WNCV.S.F02 && WNCV.S.A000b")) {
                 NextTest();
                 return;
             }
-            err = TestStep5bIfPaLfThReadsTargetPositionLiftPercent100thsAttributeFromDut_27();
+            err = TestStep5bIfPaLfThReadsTargetPositionLiftPercent100thsAttributeFromDut_22();
             break;
-        case 28:
-            ChipLogProgress(chipTool, " ***** Test Step 28 : Step 5c: If (PA & TL) TH reads TargetPositionTiltPercent100ths attribute from DUT\n");
+        case 23:
+            ChipLogProgress(chipTool, " ***** Test Step 23 : Step 5c: If (PA & TL) TH reads TargetPositionTiltPercent100ths attribute from DUT\n");
             if (ShouldSkip("WNCV.S.F01 && WNCV.S.F04 && WNCV.S.A000c")) {
                 NextTest();
                 return;
             }
-            err = TestStep5cIfPaTlThReadsTargetPositionTiltPercent100thsAttributeFromDut_28();
+            err = TestStep5cIfPaTlThReadsTargetPositionTiltPercent100thsAttributeFromDut_23();
             break;
         }
 
@@ -116469,21 +116783,6 @@
         case 23:
             VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
             break;
-        case 24:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 25:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 26:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 27:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 28:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
         }
 
         // Go on to the next test.
@@ -116494,7 +116793,7 @@
 
 private:
     std::atomic_uint16_t mTestIndex;
-    const uint16_t mTestCount = 29;
+    const uint16_t mTestCount = 24;
 
     chip::Optional<chip::NodeId> mNodeId;
     chip::Optional<chip::CharSpan> mCluster;
@@ -116541,7 +116840,7 @@
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value;
-        value.ms = mStep1bWaitTime.HasValue() ? mStep1bWaitTime.Value() : 10000UL;
+        value.ms = mStep1bWaitTime.HasValue() ? mStep1bWaitTime.Value() : 5000UL;
         return WaitForMs("alpha", value);
     }
 
@@ -116688,7 +116987,7 @@
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value;
-        value.ms = mStep2bWaitTime.HasValue() ? mStep2bWaitTime.Value() : 500UL;
+        value.ms = mStep2bWaitTime.HasValue() ? mStep2bWaitTime.Value() : 200UL;
         return WaitForMs("alpha", value);
     }
 
@@ -116755,9 +117054,8 @@
         value.ms = mStep2eWaitTime.HasValue() ? mStep2eWaitTime.Value() : 1000UL;
         return WaitForMs("alpha", value);
     }
-    NSNumber * _Nonnull OperationalStatusValue;
 
-    CHIP_ERROR TestStep3a1ThReadsOperationalStatusAttributesBit01_12()
+    CHIP_ERROR TestStep3aThReadsOperationalStatusAttributeFromDut_12()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -116766,162 +117064,21 @@
 
         [cluster readAttributeOperationalStatusWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3a1: TH reads OperationalStatus attribute's bit 0..1: Error: %@", err);
+                NSLog(@"Step 3a: TH reads OperationalStatus attribute from DUT: Error: %@", err);
             } else {
-                NSLog(@"Step 3a1: TH reads OperationalStatus attribute's bit 0..1: Success");
+                NSLog(@"Step 3a: TH reads OperationalStatus attribute from DUT: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
 
             VerifyOrReturn(CheckConstraintType("operationalStatus", "bitmap8", "bitmap8"));
-            {
-                OperationalStatusValue = value;
-            }
-
             NextTest();
         }];
 
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3a2WriteAttributeBitmap8WithOperationalStatusValueToDoTheBitsChecksInUpcomingOperationalStatusReadSteps_13()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterUnitTesting alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        id bitmap8Argument;
-        bitmap8Argument =
-            [OperationalStatusValue copy];
-        [cluster writeAttributeBitmap8WithValue:bitmap8Argument completion:^(NSError * _Nullable err) {
-            if (err != nil) {
-                NSLog(@"Step 3a2: Write attribute BITMAP8 with OperationalStatusValue to do the bits checks in upcoming OperationalStatus read steps.: Error: %@", err);
-            } else {
-                NSLog(@"Step 3a2: Write attribute BITMAP8 with OperationalStatusValue to do the bits checks in upcoming OperationalStatus read steps.: Success");
-            }
-
-            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-            NextTest();
-        }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestStep3a3ThChecksOperationalStatusValueBit23Wncvsf00lf_14()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterUnitTesting alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        [cluster readAttributeBitmap8WithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
-            if (err != nil) {
-                NSLog(@"Step 3a3: TH checks OperationalStatus value bit 2..3 (WNCV.S.F00(LF)): Error: %@", err);
-            } else {
-                NSLog(@"Step 3a3: TH checks OperationalStatus value bit 2..3 (WNCV.S.F00(LF)): Success");
-            }
-
-            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-            {
-                id actualValue = value;
-                VerifyOrReturn(CheckValue("bitmap8", actualValue, OperationalStatusValue));
-            }
-
-            VerifyOrReturn(CheckConstraintType("bitmap8", "bitmap8", "bitmap8"));
-            NextTest();
-        }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestStep3a4ThChecksOperationalStatusValueBit23Wncvsf00lf_15()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterUnitTesting alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        [cluster readAttributeBitmap8WithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
-            if (err != nil) {
-                NSLog(@"Step 3a4: TH checks OperationalStatus value bit 2..3 (WNCV.S.F00(LF)): Error: %@", err);
-            } else {
-                NSLog(@"Step 3a4: TH checks OperationalStatus value bit 2..3 (WNCV.S.F00(LF)): Success");
-            }
-
-            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-            {
-                id actualValue = value;
-                VerifyOrReturn(CheckValue("bitmap8", actualValue, OperationalStatusValue));
-            }
-
-            VerifyOrReturn(CheckConstraintType("bitmap8", "bitmap8", "bitmap8"));
-            NextTest();
-        }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestStep3a5ThChecksOperationalStatusValueBit45Wncvsf01tl_16()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterUnitTesting alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        [cluster readAttributeBitmap8WithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
-            if (err != nil) {
-                NSLog(@"Step 3a5: TH checks OperationalStatus value bit 4..5 (WNCV.S.F01(TL)): Error: %@", err);
-            } else {
-                NSLog(@"Step 3a5: TH checks OperationalStatus value bit 4..5 (WNCV.S.F01(TL)): Success");
-            }
-
-            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-            {
-                id actualValue = value;
-                VerifyOrReturn(CheckValue("bitmap8", actualValue, OperationalStatusValue));
-            }
-
-            VerifyOrReturn(CheckConstraintType("bitmap8", "bitmap8", "bitmap8"));
-            NextTest();
-        }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestStep3a6ThChesksOperationalStatusValueBit45Wncvsf01tl_17()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterUnitTesting alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        [cluster readAttributeBitmap8WithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
-            if (err != nil) {
-                NSLog(@"Step 3a6: TH chesks OperationalStatus value bit 4..5 (WNCV.S.F01(TL)): Error: %@", err);
-            } else {
-                NSLog(@"Step 3a6: TH chesks OperationalStatus value bit 4..5 (WNCV.S.F01(TL)): Success");
-            }
-
-            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-            {
-                id actualValue = value;
-                VerifyOrReturn(CheckValue("bitmap8", actualValue, OperationalStatusValue));
-            }
-
-            VerifyOrReturn(CheckConstraintType("bitmap8", "bitmap8", "bitmap8"));
-            NextTest();
-        }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestStep3a7DutUpdatesItsAttributes_18()
+    CHIP_ERROR TestStep3aDutUpdatesItsAttributes_13()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value;
@@ -116929,7 +117086,7 @@
         return WaitForMs("alpha", value);
     }
 
-    CHIP_ERROR TestStep3bIfPaLfThReadsCurrentPositionLiftPercent100thsAttributeFromDut_19()
+    CHIP_ERROR TestStep3bIfPaLfThReadsCurrentPositionLiftPercent100thsAttributeFromDut_14()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -116958,7 +117115,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3cIfPaLfThReadsCurrentPositionLiftPercentageOptionalAttributeFromDut_20()
+    CHIP_ERROR TestStep3cIfPaLfThReadsCurrentPositionLiftPercentageOptionalAttributeFromDut_15()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -116987,7 +117144,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3dIfPaTlThReadsCurrentPositionTiltPercent100thsAttributeFromDut_21()
+    CHIP_ERROR TestStep3dIfPaTlThReadsCurrentPositionTiltPercent100thsAttributeFromDut_16()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -117016,7 +117173,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3eIfPaLfThReadsCurrentPositionTiltPercentageOptionalAttributeFromDut_22()
+    CHIP_ERROR TestStep3eIfPaLfThReadsCurrentPositionTiltPercentageOptionalAttributeFromDut_17()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -117045,7 +117202,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4aThSendsAStopMotionCommandToDut_23()
+    CHIP_ERROR TestStep4aThSendsAStopMotionCommandToDut_18()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -117068,7 +117225,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4bThWaitsFor15SecondsEndOfMotionsOnTheDut_24()
+    CHIP_ERROR TestStep4bThWaitsFor15SecondsEndOfMotionsOnTheDut_19()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value;
@@ -117076,7 +117233,7 @@
         return WaitForMs("alpha", value);
     }
 
-    CHIP_ERROR TestStep4cThReadsOperationalStatusAttributeFromDut_25()
+    CHIP_ERROR TestStep4cThReadsOperationalStatusAttributeFromDut_20()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -117103,15 +117260,15 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5aThWaitsFor1001000Ms_26()
+    CHIP_ERROR TestStep5aThWaitsFor1001000Ms_21()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value;
-        value.ms = mStep5aWaitTime.HasValue() ? mStep5aWaitTime.Value() : 500UL;
+        value.ms = mStep5aWaitTime.HasValue() ? mStep5aWaitTime.Value() : 200UL;
         return WaitForMs("alpha", value);
     }
 
-    CHIP_ERROR TestStep5bIfPaLfThReadsTargetPositionLiftPercent100thsAttributeFromDut_27()
+    CHIP_ERROR TestStep5bIfPaLfThReadsTargetPositionLiftPercent100thsAttributeFromDut_22()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -117140,7 +117297,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5cIfPaTlThReadsTargetPositionTiltPercent100thsAttributeFromDut_28()
+    CHIP_ERROR TestStep5cIfPaTlThReadsTargetPositionTiltPercent100thsAttributeFromDut_23()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -191092,12 +191249,12 @@
             err = TestStep3cGivenACFREMONSF01WarningEnsureFeaturemapHasTheCorrectBitSet_4();
             break;
         case 5:
-            ChipLogProgress(chipTool, " ***** Test Step 5 : Step 3d: Given ACFREMON.S.F01(ReplacementProductList) ensure featuremap has the correct bit set\n");
+            ChipLogProgress(chipTool, " ***** Test Step 5 : Step 3d: Given ACFREMON.S.F02(ReplacementProductList) ensure featuremap has the correct bit set\n");
             if (ShouldSkip("ACFREMON.S.F02")) {
                 NextTest();
                 return;
             }
-            err = TestStep3dGivenACFREMONSF01ReplacementProductListEnsureFeaturemapHasTheCorrectBitSet_5();
+            err = TestStep3dGivenACFREMONSF02ReplacementProductListEnsureFeaturemapHasTheCorrectBitSet_5();
             break;
         case 6:
             ChipLogProgress(chipTool, " ***** Test Step 6 : Step 4a: TH reads from the DUT the AttributeList attribute.\n");
@@ -191361,7 +191518,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep3dGivenACFREMONSF01ReplacementProductListEnsureFeaturemapHasTheCorrectBitSet_5()
+    CHIP_ERROR TestStep3dGivenACFREMONSF02ReplacementProductListEnsureFeaturemapHasTheCorrectBitSet_5()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -191370,9 +191527,9 @@
 
         [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 3d: Given ACFREMON.S.F01(ReplacementProductList) ensure featuremap has the correct bit set: Error: %@", err);
+                NSLog(@"Step 3d: Given ACFREMON.S.F02(ReplacementProductList) ensure featuremap has the correct bit set: Error: %@", err);
             } else {
-                NSLog(@"Step 3d: Given ACFREMON.S.F01(ReplacementProductList) ensure featuremap has the correct bit set: Success");
+                NSLog(@"Step 3d: Given ACFREMON.S.F02(ReplacementProductList) ensure featuremap has the correct bit set: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
@@ -191670,8 +191827,8 @@
         // incorrect mTestIndex value observed when we get the response.
         switch (mTestIndex++) {
         case 0:
-            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: Wait for the commissioned device to be retrieved\n");
-            err = TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0();
+            ChipLogProgress(chipTool, " ***** Test Step 0 : Step 1: Commission DUT to TH (can be skipped if done in a preceding test).\n");
+            err = TestStep1CommissionDutToThCanBeSkippedIfDoneInAPrecedingTest_0();
             break;
         case 1:
             ChipLogProgress(chipTool, " ***** Test Step 1 : Step 2: TH reads from the DUT the Condition attribute.\n");
@@ -191690,36 +191847,44 @@
             err = TestStep3ThReadsFromTheDutTheDegradationDirectionAttribute_2();
             break;
         case 3:
-            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4: TH reads from the DUT the ChangeIndication attribute.\n");
-            if (ShouldSkip("ACFREMON.S.A0002")) {
+            ChipLogProgress(chipTool, " ***** Test Step 3 : Step 4a: TH reads from the DUT the ChangeIndication attribute.\n");
+            if (ShouldSkip("ACFREMON.S.A0002 && !ACFREMON.S.F01")) {
                 NextTest();
                 return;
             }
-            err = TestStep4ThReadsFromTheDutTheChangeIndicationAttribute_3();
+            err = TestStep4aThReadsFromTheDutTheChangeIndicationAttribute_3();
             break;
         case 4:
-            ChipLogProgress(chipTool, " ***** Test Step 4 : Step 5: TH reads from the DUT the InPlaceIndicator attribute\n");
+            ChipLogProgress(chipTool, " ***** Test Step 4 : Step 4b: TH reads from the DUT the ChangeIndication attribute.\n");
+            if (ShouldSkip("ACFREMON.S.F01 && ACFREMON.S.A0002")) {
+                NextTest();
+                return;
+            }
+            err = TestStep4bThReadsFromTheDutTheChangeIndicationAttribute_4();
+            break;
+        case 5:
+            ChipLogProgress(chipTool, " ***** Test Step 5 : Step 5: TH reads from the DUT the InPlaceIndicator attribute\n");
             if (ShouldSkip("ACFREMON.S.A0003")) {
                 NextTest();
                 return;
             }
-            err = TestStep5ThReadsFromTheDutTheInPlaceIndicatorAttribute_4();
+            err = TestStep5ThReadsFromTheDutTheInPlaceIndicatorAttribute_5();
             break;
-        case 5:
-            ChipLogProgress(chipTool, " ***** Test Step 5 : Step 6: TH reads from the DUT the LastChangedTime attribute\n");
+        case 6:
+            ChipLogProgress(chipTool, " ***** Test Step 6 : Step 6: TH reads from the DUT the LastChangedTime attribute\n");
             if (ShouldSkip("ACFREMON.S.A0004")) {
                 NextTest();
                 return;
             }
-            err = TestStep6ThReadsFromTheDutTheLastChangedTimeAttribute_5();
+            err = TestStep6ThReadsFromTheDutTheLastChangedTimeAttribute_6();
             break;
-        case 6:
-            ChipLogProgress(chipTool, " ***** Test Step 6 : Step 7: TH reads from the DUT the ReplacementProductList attribute\n");
+        case 7:
+            ChipLogProgress(chipTool, " ***** Test Step 7 : Step 7: TH reads from the DUT the ReplacementProductList attribute\n");
             if (ShouldSkip("ACFREMON.S.A0005")) {
                 NextTest();
                 return;
             }
-            err = TestStep7ThReadsFromTheDutTheReplacementProductListAttribute_6();
+            err = TestStep7ThReadsFromTheDutTheReplacementProductListAttribute_7();
             break;
         }
 
@@ -191753,6 +191918,9 @@
         case 6:
             VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
             break;
+        case 7:
+            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+            break;
         }
 
         // Go on to the next test.
@@ -191763,14 +191931,14 @@
 
 private:
     std::atomic_uint16_t mTestIndex;
-    const uint16_t mTestCount = 7;
+    const uint16_t mTestCount = 8;
 
     chip::Optional<chip::NodeId> mNodeId;
     chip::Optional<chip::CharSpan> mCluster;
     chip::Optional<chip::EndpointId> mEndpoint;
     chip::Optional<uint16_t> mTimeout;
 
-    CHIP_ERROR TestStep1WaitForTheCommissionedDeviceToBeRetrieved_0()
+    CHIP_ERROR TestStep1CommissionDutToThCanBeSkippedIfDoneInAPrecedingTest_0()
     {
 
         chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
@@ -191830,7 +191998,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep4ThReadsFromTheDutTheChangeIndicationAttribute_3()
+    CHIP_ERROR TestStep4aThReadsFromTheDutTheChangeIndicationAttribute_3()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -191839,24 +192007,49 @@
 
         [cluster readAttributeChangeIndicationWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
             if (err != nil) {
-                NSLog(@"Step 4: TH reads from the DUT the ChangeIndication attribute.: Error: %@", err);
+                NSLog(@"Step 4a: TH reads from the DUT the ChangeIndication attribute.: Error: %@", err);
             } else {
-                NSLog(@"Step 4: TH reads from the DUT the ChangeIndication attribute.: Success");
+                NSLog(@"Step 4a: TH reads from the DUT the ChangeIndication attribute.: Success");
             }
 
             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
 
             VerifyOrReturn(CheckConstraintType("changeIndication", "enum8", "enum8"));
-            VerifyOrReturn(CheckConstraintMinValue<uint8_t>("changeIndication", [value unsignedCharValue], 0U));
-            VerifyOrReturn(CheckConstraintMaxValue<uint8_t>("changeIndication", [value unsignedCharValue], 2U));
-
             NextTest();
         }];
 
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep5ThReadsFromTheDutTheInPlaceIndicatorAttribute_4()
+    CHIP_ERROR TestStep4bThReadsFromTheDutTheChangeIndicationAttribute_4()
+    {
+
+        MTRBaseDevice * device = GetDevice("alpha");
+        __auto_type * cluster = [[MTRBaseClusterActivatedCarbonFilterMonitoring alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+        [cluster readAttributeChangeIndicationWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
+            if (err != nil) {
+                NSLog(@"Step 4b: TH reads from the DUT the ChangeIndication attribute.: Error: %@", err);
+            } else {
+                NSLog(@"Step 4b: TH reads from the DUT the ChangeIndication attribute.: Success");
+            }
+
+            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+            {
+                id actualValue = value;
+                VerifyOrReturn(CheckValue("ChangeIndication", actualValue, 1U));
+            }
+
+            VerifyOrReturn(CheckConstraintType("changeIndication", "enum8", "enum8"));
+            NextTest();
+        }];
+
+        return CHIP_NO_ERROR;
+    }
+
+    CHIP_ERROR TestStep5ThReadsFromTheDutTheInPlaceIndicatorAttribute_5()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -191879,7 +192072,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep6ThReadsFromTheDutTheLastChangedTimeAttribute_5()
+    CHIP_ERROR TestStep6ThReadsFromTheDutTheLastChangedTimeAttribute_6()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
@@ -191906,7 +192099,7 @@
         return CHIP_NO_ERROR;
     }
 
-    CHIP_ERROR TestStep7ThReadsFromTheDutTheReplacementProductListAttribute_6()
+    CHIP_ERROR TestStep7ThReadsFromTheDutTheReplacementProductListAttribute_7()
     {
 
         MTRBaseDevice * device = GetDevice("alpha");
