diff --git a/jaxb-api/src/main/java/jakarta/xml/bind/JAXBContext.java b/jaxb-api/src/main/java/jakarta/xml/bind/JAXBContext.java
index a7466b5..4f92225 100644
--- a/jaxb-api/src/main/java/jakarta/xml/bind/JAXBContext.java
+++ b/jaxb-api/src/main/java/jakarta/xml/bind/JAXBContext.java
@@ -65,7 +65,7 @@
  * configure the datatype converter that will be used during these operations.</i>
  *
  * <a id="Unmarshalling"></a>
- * <h3>Unmarshalling</h3>
+ * <h2>Unmarshalling</h2>
  * <p>
  * The {@link Unmarshaller} class provides the client application the ability
  * to convert XML data into a tree of Java content objects.
diff --git a/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlAccessorOrder.java b/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlAccessorOrder.java
index 4fad316..3e1605c 100644
--- a/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlAccessorOrder.java
+++ b/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlAccessorOrder.java
@@ -21,12 +21,12 @@
 /**
  * <p> Controls the ordering of fields and properties in a class. </p>
  *
- * <h3>Usage </h3>
+ * <h2>Usage </h2>
  *
  * <p> {@code @XmlAccessorOrder} annotation can be used with the following
- * program elements:</p> 
- * 
- * <ul> 
+ * program elements:</p>
+ *
+ * <ul>
  *   <li> package</li>
  *   <li> a top level class </li>
  * </ul>
@@ -49,8 +49,8 @@
  * </ul>
  *
  * <p>This annotation can be used with the following annotations:
- *    {@link XmlType}, {@link XmlRootElement}, {@link XmlAccessorType}, 
- *    {@link XmlSchema}, {@link XmlSchemaType}, {@link XmlSchemaTypes}, 
+ *    {@link XmlType}, {@link XmlRootElement}, {@link XmlAccessorType},
+ *    {@link XmlSchema}, {@link XmlSchemaType}, {@link XmlSchemaTypes},
  *    , {@link XmlJavaTypeAdapter}. It can also be used with the
  *    following annotations at the package level: {@link XmlJavaTypeAdapter}.
  *
diff --git a/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlAnyElement.java b/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlAnyElement.java
index d884c09..0d451f0 100644
--- a/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlAnyElement.java
+++ b/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlAnyElement.java
@@ -27,19 +27,19 @@
  * Maps a JavaBean property to XML infoset representation and/or JAXB element.
  *
  * <p>
- * This annotation serves as a "catch-all" property while unmarshalling 
+ * This annotation serves as a "catch-all" property while unmarshalling
  * xml content into a instance of a JAXB annotated class. It typically
  * annotates a multi-valued JavaBean property, but it can occur on
- * single value JavaBean property. During unmarshalling, each xml element 
- * that does not match a static &#64;XmlElement or &#64;XmlElementRef 
- * annotation for the other JavaBean properties on the class, is added to this 
+ * single value JavaBean property. During unmarshalling, each xml element
+ * that does not match a static &#64;XmlElement or &#64;XmlElementRef
+ * annotation for the other JavaBean properties on the class, is added to this
  * "catch-all" property.
  *
  * <h2>Usages:</h2>
  * <pre>
  * &#64;XmlAnyElement
  * public {@link Element}[] others;
- * 
+ *
  * // Collection of {@link Element} or JAXB elements.
  * &#64;XmlAnyElement(lax="true")
  * public {@link Object}[] others;
@@ -64,7 +64,7 @@
  * <h2>Relationship to other annotations</h2>
  * <p>
  * This annotation can be used with {@link XmlJavaTypeAdapter}, so that users
- * can map their own data structure to DOM, which in turn can be composed 
+ * can map their own data structure to DOM, which in turn can be composed
  * into XML.
  *
  * <p>
@@ -237,13 +237,15 @@
      * Controls the unmarshaller behavior when it sees elements
      * known to the current {@link JAXBContext}.
      *
-     * <h3>When false</h3>
-     * <p>
+     * <dl>
+     * <dt>When false</dt>
+     * <dd>
      * If false, all the elements that match the property will be unmarshalled
      * to DOM, and the property will only contain DOM elements.
+     * </dd>
      *
-     * <h3>When true</h3>
-     * <p>
+     * <dt>When true</dt>
+     * <dd>
      * If true, when an element matches a property marked with {@link XmlAnyElement}
      * is known to {@link JAXBContext} (for example, there's a class with
      * {@link XmlRootElement} that has the same tag name, or there's
@@ -252,8 +254,10 @@
      * instead of unmarshalling it to DOM. Additionally, if the element is
      * unknown but it has a known xsi:type, the unmarshaller eagerly unmarshals
      * the element to a {@link JAXBElement}, with the unknown element name and
-     * the JAXBElement value is set to an instance of the JAXB mapping of the 
+     * the JAXBElement value is set to an instance of the JAXB mapping of the
      * known xsi:type.
+     * </dd>
+     * </dl>
      *
      * <p>
      * As a result, after the unmarshalling, the property can become heterogeneous;
diff --git a/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlElementRef.java b/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlElementRef.java
index 26605ca..ba4ebbd 100644
--- a/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlElementRef.java
+++ b/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlElementRef.java
@@ -18,7 +18,7 @@
 import static java.lang.annotation.ElementType.FIELD;
 import static java.lang.annotation.ElementType.METHOD;
 
-/** 
+/**
  * <p>
  * Maps a JavaBean property to a XML element derived from property's type.
  * <p>
@@ -34,10 +34,10 @@
  * XML element name is derived from the instance of the type of the
  * JavaBean property at runtime.
  *
- * <h3> XML Schema substitution group support </h3>
+ * <h2> XML Schema substitution group support </h2>
  * XML Schema allows a XML document author to use XML element names
  * that were not statically specified in the content model of a
- * schema using substitution groups. Schema derived code provides 
+ * schema using substitution groups. Schema derived code provides
  * support for substitution groups using an <i>element property</i>,
  * (section 5.5.5, "Element Property" of JAXB 2.0 specification). An
  * element property method signature is of the form:
@@ -52,7 +52,7 @@
  * element property indicates that the element name from {@code JAXBElement}
  * instance be used instead of deriving an XML element name from the
  * JavaBean property name.
- * 
+ *
  * <p>
  * The usage is subject to the following constraints:
  * <ul>
@@ -88,8 +88,8 @@
  *     &#64;XmlRootElement(name="target")
  *     class Target {
  *         // The presence of &#64;XmlElementRef indicates that the XML
- *         // element name will be derived from the &#64;XmlRootElement 
- *         // annotation on the type (for e.g. "jar" for JarTask). 
+ *         // element name will be derived from the &#64;XmlRootElement
+ *         // annotation on the type (for e.g. "jar" for JarTask).
  *         &#64;XmlElementRef
  *         List&lt;Task&gt; tasks;
  *     }
@@ -107,7 +107,7 @@
  *         ...
  *     }
  * {@code
- * 
+ *
  *     <!-- XML Schema fragment -->
  *     <xs:element name="target" type="Target">
  *     <xs:complexType name="Target">
@@ -148,15 +148,15 @@
  * <p> The following example shows the annotations for XML Schema
  * substitution groups.  The annotations and the ObjectFactory are
  * derived from the schema.
- * 
+ *
  * <pre>
  *     &#64;XmlElement
  *     class Math {
- *         //  The value of {@link #type()}is 
+ *         //  The value of {@link #type()}is
  *         //  JAXBElement.class , which indicates the XML
  *         //  element name ObjectFactory - in general a class marked
  *         //  with &#64;XmlRegistry. (See ObjectFactory below)
- *         //  
+ *         //
  *         //  The {@link #name()} is "operator", a pointer to a
  *         // factory method annotated with a
  *         //  {@link XmlElementDecl} with the name "operator". Since
@@ -166,7 +166,7 @@
  *         //  elements "add" or "sub". At runtime, JAXBElement
  *         //  instance contains the element name that has been
  *         //  substituted in the XML document.
- *         // 
+ *         //
  *         &#64;XmlElementRef(type=JAXBElement.class,name="operator")
  *         JAXBElement&lt;? extends Operator&gt; term;
  *     }
@@ -199,7 +199,7 @@
  *     </math>
  * }</pre>
  *
- * 
+ *
  * @author <ul><li>Kohsuke Kawaguchi, Sun Microsystems,Inc. </li><li>Sekhar Vajjhala, Sun Microsystems, Inc.</li></ul>
  * @see XmlElementRefs
  * @since 1.6, JAXB 2.0
@@ -235,7 +235,7 @@
      * an {@link XmlElementDecl}, then it is an error.
      *
      * <p> If {@code type()} is not {@code JAXBElement.class}, then
-     * this value must be "". 
+     * this value must be "".
      *
      */
     String namespace() default "";
diff --git a/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlSchema.java b/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlSchema.java
index ddb7437..61e23a6 100644
--- a/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlSchema.java
+++ b/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlSchema.java
@@ -19,11 +19,11 @@
 /**
  * <p> Maps a package name to a XML namespace. </p>
  *
- * <h3>Usage</h3>
+ * <h2>Usage</h2>
  * <p>
  * The XmlSchema annotation can be used with the following program
  * elements:
- * <ul> 
+ * <ul>
  *   <li>package</li>
  * </ul>
  *
@@ -41,15 +41,15 @@
  *        package-info.java.
  * </ul>
  *
- * <p><b>Example 1:</b> Customize name of XML namespace to which 
+ * <p><b>Example 1:</b> Customize name of XML namespace to which
  * package is mapped.</p>
  *
  * <pre>
  *    &#64;jakarta.xml.bind.annotation.XmlSchema (
  *      namespace = "http://www.example.com/MYPO1"
  *    )
- * {@code   
- * 
+ * {@code
+ *
  *    <!-- XML Schema fragment -->
  *    <schema
  *      xmlns=...
@@ -66,7 +66,7 @@
  * <pre>
  *    // Package level annotation
  *    &#64;jakarta.xml.bind.annotation.XmlSchema (
- *      xmlns = { 
+ *      xmlns = {
  *        &#64;jakarta.xml.bind.annotation.XmlNs(prefix = "po",
  *                   namespaceURI="http://www.example.com/myPO1"),
  *
@@ -75,13 +75,13 @@
  *      }
  *    )
  * {@code
- * 
+ *
  *    <!-- XML Schema fragment -->
  *    <schema
  *        xmlns:xs="http://www.w3.org/2001/XMLSchema"
  *        xmlns:po="http://www.example.com/PO1"
  *        targetNamespace="http://www.example.com/PO1">
- * 
+ *
  * }</pre>
  *
  * <p><b>Example 3:</b> Customize elementFormDefault</p>
@@ -91,13 +91,13 @@
  *      ...
  *    )
  * {@code
- * 
+ *
  *    <!-- XML Schema fragment -->
  *    <schema
  *        xmlns="http://www.w3.org/2001/XMLSchema"
  *        xmlns:po="http://www.example.com/PO1"
  *        elementFormDefault="unqualified">
- * 
+ *
  * }</pre>
 
  * @author Sekhar Vajjhala, Sun Microsystems, Inc.
@@ -120,7 +120,7 @@
     String namespace() default "";
 
     /**
-     * Namespace qualification for elements. By default, element 
+     * Namespace qualification for elements. By default, element
      * default attribute will be absent from the XML Schema fragment.
      */
     XmlNsForm elementFormDefault() default XmlNsForm.UNSET;
@@ -162,7 +162,8 @@
      * must have the same {@link #location()} values.
      *
      *
-     * <h3>Note to implementor</h3>
+     * <p>
+     * <strong>Note to implementor</strong>
      * <p>
      * More precisely, the value must be either {@code ""}, {@code "##generate"}, or
      * <a href="http://www.w3.org/TR/xmlschema-2/#anyURI">
diff --git a/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlType.java b/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlType.java
index 395a03b..20e9f9b 100644
--- a/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlType.java
+++ b/jaxb-api/src/main/java/jakarta/xml/bind/annotation/XmlType.java
@@ -30,7 +30,7 @@
  * <p>See "Package Specification" in jakarta.xml.bind.package javadoc for
  * additional common information.</p>
  *
- * <h3> Mapping a Class </h3> 
+ * <h2> Mapping a Class </h2>
  * <p>
  * A class maps to a XML Schema type. A class is a data container for
  * values represented by properties and fields. A schema type is a
@@ -45,7 +45,7 @@
  * factory method overrides the no-arg constructor.
  * <p>
  * A class maps to either a XML Schema complex type or a XML Schema simple
- * type. The XML Schema type is derived based on the 
+ * type. The XML Schema type is derived based on the
  * mapping of JavaBean properties and fields contained within the
  * class. The schema type to which the class is mapped can either be
  * named or anonymous. A class can be mapped to an anonymous schema
@@ -56,12 +56,12 @@
  * <ul>
  *   <li><b>global element: </b> A global element of an anonymous
  *      type can be derived by annotating the class with @{@link
- *      XmlRootElement}. See Example 3 below. </li> 
+ *      XmlRootElement}. See Example 3 below. </li>
  *
  *   <li><b>local element: </b> A JavaBean property that references
  *      a class annotated with @XmlType(name="") and is mapped to the
  *      element associated with the anonymous type. See Example 4
- *      below.</li> 
+ *      below.</li>
  *
  *   <li><b>attribute: </b> A JavaBean property that references
  *      a class annotated with @XmlType(name="") and is mapped to the
@@ -72,7 +72,7 @@
  *   <li>If class is annotated with {@code @XmlType(name="") }, it
  *   is mapped to an anonymous type otherwise, the class name maps
  *   to a complex type name. The {@code XmlName()} annotation element
- *   can be used to customize the name.</li>  
+ *   can be used to customize the name.</li>
  *
  *   <li> Properties and fields that are mapped to elements are mapped to a
  *   content model within a complex type. The annotation element
@@ -115,7 +115,7 @@
  *         <th scope="col">SimpleType</th>
  *       </tr>
  *     </thead>
- * 
+ *
  *     <tbody>
  *       <tr>
  *         <td>Class</td>
@@ -124,7 +124,7 @@
  *         <td>complexcontent<br>xs:all</td>
  *         <td> </td>
  *       </tr>
- * 
+ *
  *       <tr>
  *         <td>Class</td>
  *         <td>non empty</td>
@@ -132,7 +132,7 @@
  *         <td>complexcontent<br>xs:sequence</td>
  *         <td> </td>
  *       </tr>
- * 
+ *
  *       <tr>
  *         <td>Class</td>
  *         <td>X</td>
@@ -140,7 +140,7 @@
  *         <td>complexcontent<br>empty sequence</td>
  *         <td> </td>
  *       </tr>
- * 
+ *
  *       <tr>
  *         <td>Class</td>
  *         <td>X</td>
@@ -148,7 +148,7 @@
  *         <td>simplecontent</td>
  *         <td> </td>
  *       </tr>
- * 
+ *
  *       <tr>
  *         <td>Class</td>
  *         <td>X</td>
@@ -159,23 +159,23 @@
  *     </tbody>
  *   </table>
  * </blockquote>
- * 
+ *
  * <h3> Mapping an enum type </h3>
- * 
+ *
  * An enum type maps to a XML schema simple type with enumeration
  * facets. The following annotation elements are ignored since they
  * are not meaningful: {@code propOrder()} , {@code factoryMethod()} ,
  * {@code factoryClass()} .
  *
  *  <h3> Usage with other annotations </h3>
- * <p> This annotation can be used with the following annotations: 
+ * <p> This annotation can be used with the following annotations:
  * {@link XmlRootElement}, {@link XmlAccessorOrder}, {@link XmlAccessorType},
  * {@link XmlEnum}. However, {@link
  * XmlAccessorOrder} and {@link XmlAccessorType} are ignored when this
  * annotation is used on an enum type.
- * 
+ *
  * <p> <b> Example 1: </b> Map a class to a complex type with
- *   xs:sequence with a customized ordering of JavaBean properties. 
+ *   xs:sequence with a customized ordering of JavaBean properties.
  * </p>
  *
  * <pre>
@@ -183,13 +183,13 @@
  *   public class USAddress {
  *     String getName() {..};
  *     void setName(String) {..};
- * 
+ *
  *     String getStreet() {..};
  *     void setStreet(String) {..};
  *
- *     String getCity() {..}; 
+ *     String getCity() {..};
  *     void setCity(String) {..};
- * 
+ *
  *     String getState() {..};
  *     void setState(String) {..};
  *
@@ -197,7 +197,7 @@
  *     void setZip(java.math.BigDecimal) {..};
  *   }
  * {@code
- * 
+ *
  *   <!-- XML Schema mapping for USAddress -->
  *   <xs:complexType name="USAddress">
  *     <xs:sequence>
@@ -215,7 +215,7 @@
  * &#64;XmlType(propOrder={})
  * public class USAddress { ...}
  * {@code
- * 
+ *
  * <!-- XML Schema mapping for USAddress -->
  * <xs:complexType name="USAddress">
  *   <xs:all>
@@ -228,14 +228,14 @@
  * </xs:complexType>
  *}</pre>
  * <p> <b> Example 3: </b> Map a class to a global element with an
- * anonymous type. 
+ * anonymous type.
  * </p>
  * <pre>
  *   &#64;XmlRootElement
  *   &#64;XmlType(name="")
  *   public class USAddress { ...}
  * {@code
- * 
+ *
  *   <!-- XML Schema mapping for USAddress -->
  *   <xs:element name="USAddress">
  *     <xs:complexType>
@@ -261,9 +261,9 @@
  *
  *   &#64;XmlType(name="")
  *   public class USAddress { ... }
- *   } 
+ *   }
  * {@code
- * 
+ *
  *   <!-- XML Schema mapping for USAddress -->
  *   <xs:complexType name="Invoice">
  *     <xs:sequence>
@@ -282,24 +282,24 @@
  *
  * <p> <b> Example 5: </b> Map a property to an attribute with
  * anonymous type.
- * 
+ *
  * <pre>
  *
  *     //Example: Code fragment
  *     public class Item {
  *         public String name;
- *         &#64;XmlAttribute 
+ *         &#64;XmlAttribute
  *         public USPrice price;
  *     }
- *    
- *     // map class to anonymous simple type. 
+ *
+ *     // map class to anonymous simple type.
  *     &#64;XmlType(name="")
- *     public class USPrice { 
+ *     public class USPrice {
  *         &#64;XmlValue
  *         public java.math.BigDecimal price;
  *     }
  * {@code
- * 
+ *
  *     <!-- Example: XML Schema fragment -->
  *     <xs:complexType name="Item">
  *       <xs:sequence>
@@ -315,7 +315,7 @@
  *
  *  <p> <b> Example 6: </b> Define a factoryClass and factoryMethod
  *
- * <pre> 
+ * <pre>
  *      &#64;XmlType(name="USAddressType", factoryClass=USAddressFactory.class,
  *      factoryMethod="getUSAddress")
  *      public class USAddress {
@@ -326,7 +326,7 @@
  *          private String street;
  *          private int    zip;
  *
- *      public USAddress(String name, String street, String city, 
+ *      public USAddress(String name, String street, String city,
  *          String state, int zip) {
  *          this.name = name;
  *          this.street = street;
@@ -338,14 +338,14 @@
  *
  *  public class USAddressFactory {
  *      public static USAddress getUSAddress(){
- *       return new USAddress("Mark Baker", "23 Elm St", 
+ *       return new USAddress("Mark Baker", "23 Elm St",
  *          "Dayton", "OH", 90952);
  *  }
  *
  * </pre>
  *
  *  <p> <b> Example 7: </b> Define factoryMethod and use the default factoryClass
- * 
+ *
  * <pre>
  *      &#64;XmlType(name="USAddressType", factoryMethod="getNewInstance")
  *      public class USAddress {
@@ -378,25 +378,25 @@
      * Name of the XML Schema type which the class is mapped.
      */
     String name() default "##default" ;
- 
+
     /**
      * Specifies the order for XML Schema elements when class is
      * mapped to a XML Schema complex type.
-     * 
+     *
      * <p> Refer to the table for how the propOrder affects the
      * mapping of class </p>
-     * 
+     *
      * <p> The propOrder is a list of names of JavaBean properties in
      *     the class. Each name in the list is the name of a Java
      *     identifier of the JavaBean property. The order in which
      *     JavaBean properties are listed is the order of XML Schema
      *     elements to which the JavaBean properties are mapped. </p>
      * <p> All of the JavaBean properties being mapped to XML Schema elements
-     *     must be listed. 
+     *     must be listed.
      * <p> A JavaBean property or field listed in propOrder must not
      *     be transient or annotated with {@code @XmlTransient}.
      * <p> The default ordering of JavaBean properties is determined
-     *     by @{@link XmlAccessorOrder}. 
+     *     by @{@link XmlAccessorOrder}.
      */
     String[] propOrder() default {""};
 
@@ -406,19 +406,19 @@
      * containing the class is mapped.
      */
     String namespace() default "##default" ;
-   
+
     /**
      * Class containing a no-arg factory method for creating an
      * instance of this class. The default is this class.
-     * 
+     *
      * <p>If {@code factoryClass} is DEFAULT.class and
      * {@code factoryMethod} is "", then there is no static factory
      * method.
-     * 
+     *
      * <p>If {@code factoryClass} is DEFAULT.class and
-     * {@code factoryMethod} is not "", then 
+     * {@code factoryMethod} is not "", then
      * {@code factoryMethod} is the name of a static factory method
-     * in this class. 
+     * in this class.
      *
      * <p>If {@code factoryClass} is not DEFAULT.class, then
      * {@code factoryMethod} must not be "" and must be the name of
@@ -429,14 +429,14 @@
     /**
      * Used in {@link XmlType#factoryClass()} to
      * signal that either factory mehod is not used or
-     * that it's in the class with this {@link XmlType} itself. 
+     * that it's in the class with this {@link XmlType} itself.
      */
     static final class DEFAULT {}
 
     /**
      * Name of a no-arg factory method in the class specified in
      * {@code factoryClass} factoryClass().
-     * 
+     *
      */
     String factoryMethod() default "";
 }
