diff --git a/src/class-fields/call-expression-privatename.case b/src/class-fields/call-expression-privatename.case
index a00e9616c991080028edcb11ac1521f8bc2512d4..5b92093bc21cd3b813bdc419f700c76be80bb8f7 100644
--- a/src/class-fields/call-expression-privatename.case
+++ b/src/class-fields/call-expression-privatename.case
@@ -4,6 +4,7 @@
 /*---
 desc: Syntax error if you call delete on call expressions . privatename
 template: delete-error
+features: [class, class-fields-private, class-fields-public]
 ---*/
 
 //- infieldsetup
diff --git a/src/class-fields/delete-error/cls-decl-field-delete-covered.template b/src/class-fields/delete-error/cls-decl-field-delete-covered.template
index 0d5bec7303f010847d92e6845c9106d61273d592..a0d256ac3f14dac5bce503365c4ddaad5765bcdd 100644
--- a/src/class-fields/delete-error/cls-decl-field-delete-covered.template
+++ b/src/class-fields/delete-error/cls-decl-field-delete-covered.template
@@ -13,7 +13,7 @@ info: |
     It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
 
     It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
-features: [class-fields]
+features: [class, class-fields-private, class-fields-public]
 negative:
   type: SyntaxError
   phase: early
diff --git a/src/class-fields/delete-error/cls-decl-field-delete-twice-covered.template b/src/class-fields/delete-error/cls-decl-field-delete-twice-covered.template
index 917cd411a7ee8efaf667c63f6d8bc091118c0953..7c6d808cfa22ea7bd53b782e6c790478e3b5d964 100644
--- a/src/class-fields/delete-error/cls-decl-field-delete-twice-covered.template
+++ b/src/class-fields/delete-error/cls-decl-field-delete-twice-covered.template
@@ -13,7 +13,7 @@ info: |
     It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
 
     It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
-features: [class-fields]
+features: [class, class-fields-private, class-fields-public]
 negative:
   type: SyntaxError
   phase: early
diff --git a/src/class-fields/delete-error/cls-decl-field-delete.template b/src/class-fields/delete-error/cls-decl-field-delete.template
index 68cf7615bd7af17b03cf354762cb4fa0783950ac..0d50f06d40daad08444d0d49664825d6e676ac0e 100644
--- a/src/class-fields/delete-error/cls-decl-field-delete.template
+++ b/src/class-fields/delete-error/cls-decl-field-delete.template
@@ -11,7 +11,7 @@ info: |
     UnaryExpression : delete UnaryExpression
 
     It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
-features: [class-fields]
+features: [class, class-fields-private, class-fields-public]
 negative:
   type: SyntaxError
   phase: early
diff --git a/src/class-fields/delete-error/cls-decl-method-delete-covered.template b/src/class-fields/delete-error/cls-decl-method-delete-covered.template
index 2b0200d2c6a5dde857790beec95f1193e9786508..1c9e08940caf95c29f000ac788404f1cec21c967 100644
--- a/src/class-fields/delete-error/cls-decl-method-delete-covered.template
+++ b/src/class-fields/delete-error/cls-decl-method-delete-covered.template
@@ -13,7 +13,7 @@ info: |
     It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
 
     It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
-features: [class-fields]
+features: [class, class-fields-private]
 negative:
   type: SyntaxError
   phase: early
diff --git a/src/class-fields/delete-error/cls-decl-method-delete-twice-covered.template b/src/class-fields/delete-error/cls-decl-method-delete-twice-covered.template
index f39de82a4136be860e4c12adaf74873a008b717c..838d046b966e63ae2de510c6b6caa22e77d2c987 100644
--- a/src/class-fields/delete-error/cls-decl-method-delete-twice-covered.template
+++ b/src/class-fields/delete-error/cls-decl-method-delete-twice-covered.template
@@ -13,7 +13,7 @@ info: |
     It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
 
     It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
-features: [class-fields]
+features: [class, class-fields-private]
 negative:
   type: SyntaxError
   phase: early
diff --git a/src/class-fields/delete-error/cls-decl-method-delete.template b/src/class-fields/delete-error/cls-decl-method-delete.template
index 1f267683f76abdd51de3858e5d90ae39f527e4b1..30fabc7ae93ab9a169732692b93c203b86cca042 100644
--- a/src/class-fields/delete-error/cls-decl-method-delete.template
+++ b/src/class-fields/delete-error/cls-decl-method-delete.template
@@ -11,7 +11,7 @@ info: |
     UnaryExpression : delete UnaryExpression
 
     It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
-features: [class-fields]
+features: [class, class-fields-private]
 negative:
   type: SyntaxError
   phase: early
diff --git a/src/class-fields/delete-error/cls-expr-field-delete-covered.template b/src/class-fields/delete-error/cls-expr-field-delete-covered.template
index bf3af2a6cb5593da47d7c6810703de760a1526b7..e67a113fb98be349d7f9175112fda2856ddfc3b6 100644
--- a/src/class-fields/delete-error/cls-expr-field-delete-covered.template
+++ b/src/class-fields/delete-error/cls-expr-field-delete-covered.template
@@ -13,7 +13,7 @@ info: |
     It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
 
     It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
-features: [class-fields]
+features: [class, class-fields-private]
 negative:
   type: SyntaxError
   phase: early
diff --git a/src/class-fields/delete-error/cls-expr-field-delete-twice-covered.template b/src/class-fields/delete-error/cls-expr-field-delete-twice-covered.template
index 595b706dcbc863d7be8fb6e01facbabd5c0fbe49..1373b63ed156fd459751754619a4c4d8e2a4a0b0 100644
--- a/src/class-fields/delete-error/cls-expr-field-delete-twice-covered.template
+++ b/src/class-fields/delete-error/cls-expr-field-delete-twice-covered.template
@@ -13,7 +13,7 @@ info: |
     It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
 
     It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
-features: [class-fields]
+features: [class, class-fields-private, class-fields-public]
 negative:
   type: SyntaxError
   phase: early
diff --git a/src/class-fields/delete-error/cls-expr-field-delete.template b/src/class-fields/delete-error/cls-expr-field-delete.template
index 29eea4fcf39dc5fb6287800a0e9ef5083b696fa3..9b9e2982c952b5aecb2208cafdcb342ae9820491 100644
--- a/src/class-fields/delete-error/cls-expr-field-delete.template
+++ b/src/class-fields/delete-error/cls-expr-field-delete.template
@@ -11,7 +11,7 @@ info: |
     UnaryExpression : delete UnaryExpression
 
     It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
-features: [class-fields]
+features: [class, class-fields-private, class-fields-public]
 negative:
   type: SyntaxError
   phase: early
diff --git a/src/class-fields/delete-error/cls-expr-method-delete-covered.template b/src/class-fields/delete-error/cls-expr-method-delete-covered.template
index 41ebc0e3bb3c29098387871c88144bc58be6aec2..cc3757715f11952bc2e48ba3515885283db8970a 100644
--- a/src/class-fields/delete-error/cls-expr-method-delete-covered.template
+++ b/src/class-fields/delete-error/cls-expr-method-delete-covered.template
@@ -13,7 +13,7 @@ info: |
     It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
 
     It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
-features: [class-fields]
+features: [class, class-fields-private]
 negative:
   type: SyntaxError
   phase: early
diff --git a/src/class-fields/delete-error/cls-expr-method-delete-twice-covered.template b/src/class-fields/delete-error/cls-expr-method-delete-twice-covered.template
index f456e7c7ca02f321cae696627087aec69705f2f1..ad5f46f207d04b306b58e6034c65a82adee499d9 100644
--- a/src/class-fields/delete-error/cls-expr-method-delete-twice-covered.template
+++ b/src/class-fields/delete-error/cls-expr-method-delete-twice-covered.template
@@ -13,7 +13,7 @@ info: |
     It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
 
     It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
-features: [class-fields]
+features: [class, class-fields-private]
 negative:
   type: SyntaxError
   phase: early
diff --git a/src/class-fields/delete-error/cls-expr-method-delete.template b/src/class-fields/delete-error/cls-expr-method-delete.template
index c80c0faa00225d06dd00f5bc4c673a797511bb0b..c6f3b9abc7992d20e5924e50aae42ad44e43c78d 100644
--- a/src/class-fields/delete-error/cls-expr-method-delete.template
+++ b/src/class-fields/delete-error/cls-expr-method-delete.template
@@ -11,7 +11,7 @@ info: |
     UnaryExpression : delete UnaryExpression
 
     It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
-features: [class-fields]
+features: [class, class-fields-private]
 negative:
   type: SyntaxError
   phase: early
diff --git a/src/class-fields/initializer-error/cls-decl-fields-private-arrow-fnc.template b/src/class-fields/initializer-error/cls-decl-fields-private-arrow-fnc.template
index 4856108dc1dd376b38abfbbebf5ace225541e84a..2fc2adc958107d08e8691007a6bc1b10918ad054 100644
--- a/src/class-fields/initializer-error/cls-decl-fields-private-arrow-fnc.template
+++ b/src/class-fields/initializer-error/cls-decl-fields-private-arrow-fnc.template
@@ -5,7 +5,7 @@
 esid: sec-class-definitions-static-semantics-early-errors
 path: language/statements/class/fields-private-arrow-fnc-
 name: private field, arrow function expression
-features: [arrow-function]
+features: [class, arrow-function, class-fields-private]
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
diff --git a/src/class-fields/initializer-error/cls-decl-fields-private-name.template b/src/class-fields/initializer-error/cls-decl-fields-private-name.template
index 615ce8cef73bac937a1e7cb0cf2e0c0bf384fb44..2b31e10a121904c1290d42655cb228a7a0a485b5 100644
--- a/src/class-fields/initializer-error/cls-decl-fields-private-name.template
+++ b/src/class-fields/initializer-error/cls-decl-fields-private-name.template
@@ -5,6 +5,7 @@
 esid: sec-class-definitions-static-semantics-early-errors
 path: language/statements/class/fields-private-literal-name-
 name: ClassElementName PrivateName
+features: [class, class-fields-private]
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
diff --git a/src/class-fields/initializer-error/cls-decl-fields-private-ternary.template b/src/class-fields/initializer-error/cls-decl-fields-private-ternary.template
index 935d49fc894a565b98f93537f5c59c67ccacad22..9c9ec22bc0123ac8dd6dcbdf2f7ad1bca95adf92 100644
--- a/src/class-fields/initializer-error/cls-decl-fields-private-ternary.template
+++ b/src/class-fields/initializer-error/cls-decl-fields-private-ternary.template
@@ -5,6 +5,7 @@
 esid: sec-class-definitions-static-semantics-early-errors
 path: language/statements/class/fields-private-ternary-
 name: private field, ternary expression
+features: [class, class-fields-private]
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
diff --git a/src/class-fields/initializer-error/cls-decl-fields-private-typeof.template b/src/class-fields/initializer-error/cls-decl-fields-private-typeof.template
index ad7bddf909421cee3393d805fcbf9b70a21f0ff1..dd749a0e44d46f25ca095a8c9968eeff56514655 100644
--- a/src/class-fields/initializer-error/cls-decl-fields-private-typeof.template
+++ b/src/class-fields/initializer-error/cls-decl-fields-private-typeof.template
@@ -5,6 +5,7 @@
 esid: sec-class-definitions-static-semantics-early-errors
 path: language/statements/class/fields-private-typeof-
 name: private field, typeof expression
+features: [class, class-fields-private]
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
diff --git a/src/class-fields/initializer-error/cls-decl-fields-static-private-name.template b/src/class-fields/initializer-error/cls-decl-fields-static-private-name.template
index c50194b6a5f6e3b452cc6d560807f872964b28e2..0138ad74921c8dcdda336971ed671f58dba551fb 100644
--- a/src/class-fields/initializer-error/cls-decl-fields-static-private-name.template
+++ b/src/class-fields/initializer-error/cls-decl-fields-static-private-name.template
@@ -5,6 +5,7 @@
 esid: sec-class-definitions-static-semantics-early-errors
 path: language/statements/class/fields-static-private-
 name: static PrivateName
+features: [class, class-fields-private]
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
diff --git a/src/class-fields/initializer-error/cls-expr-fields-private-arrow-fnc.template b/src/class-fields/initializer-error/cls-expr-fields-private-arrow-fnc.template
index 1f62c0484ce65a106a1765d48234f817dc4c9ed2..919fd0a0db76e3ce94fa8052f3df2c44d7f1c665 100644
--- a/src/class-fields/initializer-error/cls-expr-fields-private-arrow-fnc.template
+++ b/src/class-fields/initializer-error/cls-expr-fields-private-arrow-fnc.template
@@ -5,7 +5,7 @@
 esid: sec-class-definitions-static-semantics-early-errors
 path: language/expressions/class/fields-private-arrow-fnc-
 name: private field, arrow function expression
-features: [arrow-function]
+features: [class, arrow-function, class-fields-private]
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
diff --git a/src/class-fields/initializer-error/cls-expr-fields-private-name.template b/src/class-fields/initializer-error/cls-expr-fields-private-name.template
index 5c334c915f0c2387bc5866f4ccf92fe21a76cd42..2d88acbcadea17cec642bf38e471b66c4e462587 100644
--- a/src/class-fields/initializer-error/cls-expr-fields-private-name.template
+++ b/src/class-fields/initializer-error/cls-expr-fields-private-name.template
@@ -5,6 +5,7 @@
 esid: sec-class-definitions-static-semantics-early-errors
 path: language/expressions/class/fields-private-literal-name-
 name: ClassElementName PrivateName
+features: [class, class-fields-private]
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
diff --git a/src/class-fields/initializer-error/cls-expr-fields-private-ternary.template b/src/class-fields/initializer-error/cls-expr-fields-private-ternary.template
index 0e8c571449cf1815e7176abfb8bdb3c629d41bd4..051387f09d0ddf83e401598eec84c4162badf464 100644
--- a/src/class-fields/initializer-error/cls-expr-fields-private-ternary.template
+++ b/src/class-fields/initializer-error/cls-expr-fields-private-ternary.template
@@ -5,6 +5,7 @@
 esid: sec-class-definitions-static-semantics-early-errors
 path: language/expressions/class/fields-private-ternary-
 name: private field, ternary expression
+features: [class, class-fields-private]
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
diff --git a/src/class-fields/initializer-error/cls-expr-fields-private-typeof.template b/src/class-fields/initializer-error/cls-expr-fields-private-typeof.template
index bd2d6e3b093f88ab361c18926b7ea64d54209cea..7bb74a24f806f5c87512c123ef2cfbffa36c1c68 100644
--- a/src/class-fields/initializer-error/cls-expr-fields-private-typeof.template
+++ b/src/class-fields/initializer-error/cls-expr-fields-private-typeof.template
@@ -5,6 +5,7 @@
 esid: sec-class-definitions-static-semantics-early-errors
 path: language/expressions/class/fields-private-typeof-
 name: private field, typeof expression
+features: [class, class-fields-private]
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
diff --git a/src/class-fields/initializer-error/cls-expr-fields-static-private-name.template b/src/class-fields/initializer-error/cls-expr-fields-static-private-name.template
index 0d3c770f9beeb00aaaa34166a14d752c057f8bd5..ea342167f1ea1376b7d4629a29f25bb470cbc415 100644
--- a/src/class-fields/initializer-error/cls-expr-fields-static-private-name.template
+++ b/src/class-fields/initializer-error/cls-expr-fields-static-private-name.template
@@ -5,6 +5,7 @@
 esid: sec-class-definitions-static-semantics-early-errors
 path: language/expressions/class/fields-static-private-
 name: static PrivateName
+features: [class, class-fields-private]
 ---*/
 
 throw "Test262: This statement should not be evaluated.";
diff --git a/src/class-fields/member-expression-privatename.case b/src/class-fields/member-expression-privatename.case
index 595cdcea750c8c8be80b4618fe00ec61e132d9b9..99a353ec80f519340222aae6efaa0e808bda1a2d 100644
--- a/src/class-fields/member-expression-privatename.case
+++ b/src/class-fields/member-expression-privatename.case
@@ -4,6 +4,7 @@
 /*---
 desc: Syntax error if you call delete on member expressions . privatename
 template: delete-error
+features: [class-fields-private]
 ---*/
 
 //- expression
diff --git a/src/class-fields/private-names.case b/src/class-fields/private-names.case
index 24e9a7c2c15c6527d4f5047bc70de19b93c0d452..9f839452c7292e66ac7aa2a3e439a2197e61458e 100644
--- a/src/class-fields/private-names.case
+++ b/src/class-fields/private-names.case
@@ -17,6 +17,7 @@ info: |
   PrivateName:
     #IdentifierName
 template: productions
+features: [class-fields-private]
 ---*/
 
 //- fields
diff --git a/src/class-fields/static-private-names.case b/src/class-fields/static-private-names.case
index 10791399ff66e2658225d21b6a1f950f2c8e0654..89f62976cd4493f79ae3e1a6c1635d079999c3b3 100644
--- a/src/class-fields/static-private-names.case
+++ b/src/class-fields/static-private-names.case
@@ -17,6 +17,7 @@ info: |
   PrivateName:
     #IdentifierName
 template: productions
+features: [class-fields-private]
 ---*/
 
 //- fields