diff --git a/bundles/apidocs/pom.xml b/bundles/apidocs/pom.xml
index 50fb94d..3fd55ea 100644
--- a/bundles/apidocs/pom.xml
+++ b/bundles/apidocs/pom.xml
@@ -103,6 +103,11 @@
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.connectors</groupId>
+            <artifactId>jersey-jetty-http2-connector</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.connectors</groupId>
             <artifactId>jersey-netty-connector</artifactId>
             <version>${project.version}</version>
         </dependency>
@@ -214,6 +219,11 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.glassfish.jersey.ext.micrometer</groupId>
+            <artifactId>jersey-micrometer</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.ext.microprofile</groupId>
             <artifactId>jersey-mp-config</artifactId>
             <version>${project.version}</version>
diff --git a/docs/pom.xml b/docs/pom.xml
index 4f7621a..5886dfe 100644
--- a/docs/pom.xml
+++ b/docs/pom.xml
@@ -77,7 +77,7 @@
             <plugin>
                 <groupId>com.agilejava.docbkx</groupId>
                 <artifactId>docbkx-maven-plugin</artifactId>
-                <version>2.0.15</version>
+                <version>2.0.17</version>
                 <dependencies>
                     <dependency>
                         <groupId>net.sf.docbook</groupId>
diff --git a/docs/src/main/docbook/client.xml b/docs/src/main/docbook/client.xml
index 85e9fd8..6f2be1c 100644
--- a/docs/src/main/docbook/client.xml
+++ b/docs/src/main/docbook/client.xml
@@ -661,6 +661,11 @@
                             <entry><literal>org.glassfish.jersey.connectors:jersey-jetty-connector</literal></entry>
                         </row>
                         <row>
+                            <entry>Jetty HTTP/2 client</entry>
+                            <entry>&jersey.jetty.JettyHttp2ConnectorProvider;</entry>
+                            <entry><literal>org.glassfish.jersey.connectors:jersey-jetty-http2-connector</literal></entry>
+                        </row>
+                        <row>
                             <entry>Netty NIO framework</entry>
                             <entry>&jersey.netty.NettyConnectorProvider;</entry>
                             <entry><literal>org.glassfish.jersey.connectors:jersey-netty-connector</literal></entry>
diff --git a/docs/src/main/docbook/jersey.ent b/docs/src/main/docbook/jersey.ent
index a6b2d80..7b08086 100644
--- a/docs/src/main/docbook/jersey.ent
+++ b/docs/src/main/docbook/jersey.ent
@@ -109,6 +109,8 @@
 <!ENTITY helidon.link "<link xlink:href='https://helidon.io/'>Helidon</link>">
 <!ENTITY smallrye.link "<link xlink:href='https://smallrye.io/'>SmallRye</link>">
 <!ENTITY yasson.link "<link xlink:href='https://eclipse-ee4j.github.io/yasson/'>Yasson</link>">
+<!ENTITY micrometer.link "<link xlink:href='https://micrometer.io/'>Micrometer project</link>">
+<!ENTITY micrometer.jersey.link "<link xlink:href='https://micrometer.io/docs/ref/jetty'>Micrometer Jersey/Jetty support</link>">
 
 <!-- API Docs links -->
 <!ENTITY bv.Configuration "<link xlink:href='&bv11.javadoc.uri;/javax/validation/Configuration.html'>Configuration</link>">
@@ -476,6 +478,7 @@
 <!ENTITY jersey.jetty.JettyClientProperties.SYNC_LISTENER_RESPONSE_MAX_SIZE "<link xlink:href='&jersey.javadoc.uri.prefix;/jetty/connector/JettyClientProperties.html#SYNC_LISTENER_RESPONSE_MAX_SIZE'>JettyClientProperties.SYNC_LISTENER_RESPONSE_MAX_SIZE</link>" >
 <!ENTITY jersey.jetty.JettyClientProperties.TOTAL_TIMEOUT "<link xlink:href='&jersey.javadoc.uri.prefix;/jetty/connector/JettyClientProperties.html#TOTAL_TIMEOUT'>JettyClientProperties.TOTAL_TIMEOUT</link>" >
 <!ENTITY jersey.jetty.JettyConnectorProvider "<link xlink:href='&jersey.javadoc.uri.prefix;/jetty/connector/JettyConnectorProvider.html'>JettyConnectorProvider</link>">
+<!ENTITY jersey.jetty.JettyHttp2ConnectorProvider "<link xlink:href='&jersey.javadoc.uri.prefix;/jetty/http2/connector/JettyConnectorProvider.html'>JettyHttp2ConnectorProvider</link>">
 <!ENTITY jersey.jetty.JettyHttpContainer "<link xlink:href='&jersey.javadoc.uri.prefix;/jetty/JettyHttpContainer.html'>JettyHttpContainer</link>">
 <!ENTITY jersey.jetty.JettyHttpContainerFactory "<link xlink:href='&jersey.javadoc.uri.prefix;/jetty/JettyHttpContainerFactory.html'>JettyHttpContainerFactory</link>">
 <!ENTITY jersey.jetty.JettyHttpContainerProvider "<link xlink:href='&jersey.javadoc.uri.prefix;/jetty/JettyHttpContainerProvider.html'>JettyHttpContainerProvider</link>">
diff --git a/docs/src/main/docbook/micrometer.xml b/docs/src/main/docbook/micrometer.xml
new file mode 100644
index 0000000..f09375e
--- /dev/null
+++ b/docs/src/main/docbook/micrometer.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available at
+    https://www.gnu.org/software/classpath/license.html.
+
+    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+-->
+
+<!DOCTYPE chapter [<!ENTITY % ents SYSTEM "jersey.ent" > %ents; ]>
+<chapter xmlns="http://docbook.org/ns/docbook"
+         version="5.0"
+         xml:lang="en"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns:xi="http://www.w3.org/2001/XInclude"
+         xmlns:xlink="http://www.w3.org/1999/xlink"
+         xsi:schemaLocation="http://docbook.org/ns/docbook http://docbook.org/xml/5.0/xsd/docbook.xsd
+                             http://www.w3.org/1999/xlink http://www.w3.org/1999/xlink.xsd"
+         xml:id="jersey-micrometer">
+    <title>Micrometer - application observability facade</title>
+    <para>
+        The chapter is about Micrometer integration into Jersey which comes since the version 2.41 as an extension module.
+        Before Jersey 2.41, it was possible to integrate Micrometer with Jersey using directly &micrometer.jersey.link;.
+        There is also support for Jakarta EE 10 integration. The detailed documentation regarding metrics fine-tuning
+        can be found at the &micrometer.link;.
+    </para>
+    <section xml:id="micrometer-integration">
+        <title>Integration into Jersey</title>
+        <para>
+            Since Jersey 2.41 it's possibly to use an extension module in order to use Micrometer instrumentation
+            inside your projects. The module shall be added as a dependency:
+            <programlisting language="xml" linenumbering="unnumbered">&lt;dependency>
+   &lt;groupId>org.glassfish.jersey.ext.micrometer&lt;/groupId>
+   &lt;artifactId>jersey-micrometer&lt;/artifactId>
+   &lt;version>&version;&lt;/scope>
+&lt;/dependency></programlisting>
+            After the dependency is added, the Micrometer can be configured as follows:
+            <programlisting language="java" linenumbering="unnumbered">final ResourceConfig resourceConfig = new ResourceConfig();
+resourceConfig.register(new MetricsApplicationEventListener(
+                registry,
+                new DefaultJerseyTagsProvider(), "http.shared.metrics", true));
+final ServletContainer servletContainer = new ServletContainer(resourceConfig);</programlisting>
+            the registry instance is of type <literal>MeterRegistry</literal> which could be
+            <literal>new SimpleMeterRegistry();</literal>. Then all metrics can be accessed like
+            <literal>registry.get("http.shared.metrics")</literal>. The "http.shared.metrics" string
+            is the name of a particular registry which was registered within the
+            <literal>MetricsApplicationEventListener</literal>.
+
+            Micrometer supports a set of <literal>Meter</literal> primitives, including <literal>Timer</literal>,
+            <literal>Counter</literal>, <literal>Gauge</literal>, <literal>DistributionSummary</literal>,
+            <literal>LongTaskTimer</literal>, <literal>FunctionCounter</literal>, <literal>FunctionTimer</literal>,
+            and <literal>TimeGauge</literal>.
+            Different meter types result in a different number of time series metrics. For example, while there is
+            a single metric that represents a <literal>Gauge</literal>, a <literal>Timer</literal> measures both the
+            count of timed events and the total time of all timed events.
+        </para>
+        <para>
+            Implementing resource methods, which should be measured, several annotations can be used. The basic example
+            demonstrates the <literal>@Counted</literal> annotation.
+            <example>
+                <title>Annotated Micrometer resource methods</title>
+                <programlisting language="java" linenumbering="unnumbered">@GET
+@Counted(value = COUNTER_NAME, description = COUNTER_DESCRIPTION)
+@Produces(MediaType.TEXT_PLAIN)
+@Path("counted")
+public String getCounterMessage() {
+        return "Requests to this method are counted. Use /metrics to see more";
+}
+                </programlisting>
+            </example>
+            Metrics however can be introduced using another annotations <literal>@Timed</literal>, or
+            <literal>@TimedSet</literal> which is a set of <literal>@Timed</literal>.
+        </para>
+    </section>
+</chapter>
\ No newline at end of file
diff --git a/docs/src/main/docbook/modules.xml b/docs/src/main/docbook/modules.xml
index 7fa60b4..6f029df 100644
--- a/docs/src/main/docbook/modules.xml
+++ b/docs/src/main/docbook/modules.xml
@@ -116,6 +116,14 @@
 </row>
 <row>
 <entry>
+<link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/jersey-container-jetty-http2/dependencies.html">
+    jersey-container-jetty-http2
+</link>
+</entry>
+<entry>Jetty HTTP/2 Container</entry>
+</row>
+<row>
+<entry>
 <link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/jersey-container-jetty-servlet/dependencies.html">
     jersey-container-jetty-servlet
 </link>
@@ -178,6 +186,14 @@
         <tbody>
 <row>
 <entry>
+<link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/jersey-apache5-connector/dependencies.html">
+    jersey-apache5-connector
+</link>
+</entry>
+<entry>Jersey Client Transport via Apache 5</entry>
+</row>
+<row>
+<entry>
 <link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/jersey-apache-connector/dependencies.html">
     jersey-apache-connector
 </link>
@@ -194,6 +210,14 @@
 </row>
 <row>
 <entry>
+<link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/jersey-helidon-connector/dependencies.html">
+    jersey-helidon-connector
+</link>
+</entry>
+<entry>Jersey Client Transport via Helidon</entry>
+</row>
+<row>
+<entry>
 <link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/jersey-jdk-connector/dependencies.html">
     jersey-jdk-connector
 </link>
@@ -210,6 +234,14 @@
 </row>
 <row>
 <entry>
+<link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/jersey-jetty-http2-connector/dependencies.html">
+    jersey-jetty-http2-connector
+</link>
+</entry>
+<entry>Jersey Client Transport via Jetty with HTTP/2 support</entry>
+</row>
+<row>
+<entry>
 <link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/jersey-netty-connector/dependencies.html">
     jersey-netty-connector
 </link>
@@ -398,6 +430,30 @@
 </row>
 <row>
 <entry>
+<link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/jersey-micrometer/dependencies.html">
+    jersey-micrometer
+</link>
+</entry>
+<entry>Jersey extension module providing support for Micrometer.</entry>
+</row>
+<row>
+<entry>
+<link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/project/jersey-mp-config/dependencies.html">
+    jersey-mp-config
+</link>
+</entry>
+<entry>Jersey extension module providing support for MicroProfile Configuration.</entry>
+</row>
+<row>
+<entry>
+<link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/project/jersey-mp-rest-client/dependencies.html">
+    jersey-mp-rest-client
+</link>
+</entry>
+<entry>Jersey extension module providing support for MicroProfile REST Client.</entry>
+</row>
+<row>
+<entry>
 <link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/jersey-mvc/dependencies.html">
     jersey-mvc
 </link>
@@ -486,6 +542,14 @@
 </row>
 <row>
 <entry>
+<link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/jersey-spring5/dependencies.html">
+    jersey-spring5
+</link>
+</entry>
+<entry>Jersey extension module providing support for Spring 5 integration.</entry>
+</row>
+<row>
+<entry>
 <link xlink:href="https://eclipse-ee4j.github.io/jersey.github.io/project-info/&version;/jersey/project/jersey-wadl-doclet/dependencies.html">
     jersey-wadl-doclet
 </link>
diff --git a/docs/src/main/docbook/user-guide.xml b/docs/src/main/docbook/user-guide.xml
index 799478d..7d41244 100644
--- a/docs/src/main/docbook/user-guide.xml
+++ b/docs/src/main/docbook/user-guide.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!--
 
-    Copyright (c) 2010, 2021 Oracle and/or its affiliates. All rights reserved.
+    Copyright (c) 2010, 2023 Oracle and/or its affiliates. All rights reserved.
 
     This program and the accompanying materials are made available under the
     terms of the Eclipse Public License v. 2.0, which is available at
@@ -105,6 +105,7 @@
     <xi:include href="declarative-linking.xml" />
     <xi:include href="resource-builder.xml" />
     <xi:include href="mp-config.xml" />
+    <xi:include href="micrometer.xml" />
     <xi:include href="sse.xml" />
     <xi:include href="security.xml" />
     <xi:include href="wadl.xml" />
diff --git a/examples/micrometer/README.MD b/examples/micrometer/README.MD
index 609a6ea..ea0e16c 100644
--- a/examples/micrometer/README.MD
+++ b/examples/micrometer/README.MD
@@ -1,16 +1,10 @@
 [//]: # " Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved. "
-[//]: # "  "
+[//]: # " "
 [//]: # " This program and the accompanying materials are made available under the "
-[//]: # " terms of the Eclipse Public License v. 2.0, which is available at "
-[//]: # " http://www.eclipse.org/legal/epl-2.0. "
-[//]: # "  "
-[//]: # " This Source Code may also be made available under the following Secondary "
-[//]: # " Licenses when the conditions for such availability set forth in the "
-[//]: # " Eclipse Public License v. 2.0 are satisfied: GNU General Public License, "
-[//]: # " version 2 with the GNU Classpath Exception, which is available at "
-[//]: # " https://www.gnu.org/software/classpath/license.html. "
-[//]: # "  "
-[//]: # " SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 "
+[//]: # " terms of the Eclipse Distribution License v. 1.0, which is available at "
+[//]: # " http://www.eclipse.org/org/documents/edl-v10.php. "
+[//]: # " "
+[//]: # " SPDX-License-Identifier: BSD-3-Clause "
 
 jersey-micrometer-webapp
 ==========================================================
@@ -24,20 +18,25 @@
 
 URI path                                   | Resource class            | HTTP methods
 ------------------------------------------ | ------------------------- | --------------
-**_/micro/meter_**                            | JerseyResource            | GET
-**_/micro/metrics_**                            | JerseyResource            | GET
-**_/micro/metrics/metrics_**                            | JerseyResource            | GET
+**_/micro/timed_**                            | MeasuredTimedResource            | GET
+**_/micro/metrics_**                            | MetricsResource            | GET
+**_/micro/summary_**                            | SummaryResource            | GET
 
 Sample Response
 ---------------
 
-```javascript
---- (micro/meter)
-Hello World!
----- (micro/metrics)   
-Listing available meters: http.shared.metrics;
----- (micro/metric/metrics)
-Overall requests counts: 9, total time (millis): 35.799483
+```html
+--- (micro/timed)
+Requests to this method are measured. Use /init to see more
+---- (micro/metrics)
+Static meters are initialized, try summary. If you want more measurements just refresh this page several times.
+---- (micro/summary)
+Listing available meters
+Many occurrences of the same name means that there are more meters which could be used with different tags, but this is actually a challenge to handle all available metrics :
+http.timers;
+http.shared.metrics;
+Counts to the init page: 2, time spent on requests to the init page (millis): 2.759025
+Requests to 'measure/timed' counts: 2, total time (millis): 40.110161
 ```
 
 
@@ -48,10 +47,10 @@
 
 >     mvn clean compile exec:java
 
-- <http://localhost:8080/micro/meter>
+- <http://localhost:8080/micro/metrics>
 - after few request to the main page go to the url
-- - <http://localhost:8080/micro/metrics>
-- and see the list of available meters
+- <http://localhost:8080/micro/timed>
+- and see the responses from available resource pages 
 - then go to the 
-- - <http://localhost:8080/micro/metrics/metrics>
+- <http://localhost:8080/micro/summary>
 - and see statistics for the micro/meter page
\ No newline at end of file
diff --git a/examples/micrometer/pom.xml b/examples/micrometer/pom.xml
index df423e1..c2329fb 100644
--- a/examples/micrometer/pom.xml
+++ b/examples/micrometer/pom.xml
@@ -4,16 +4,10 @@
     Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
 
     This program and the accompanying materials are made available under the
-    terms of the Eclipse Public License v. 2.0, which is available at
-    http://www.eclipse.org/legal/epl-2.0.
+    terms of the Eclipse Distribution License v. 1.0, which is available at
+    http://www.eclipse.org/org/documents/edl-v10.php.
 
-    This Source Code may also be made available under the following Secondary
-    Licenses when the conditions for such availability set forth in the
-    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
-    version 2 with the GNU Classpath Exception, which is available at
-    https://www.gnu.org/software/classpath/license.html.
-
-    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+    SPDX-License-Identifier: BSD-3-Clause
 
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
diff --git a/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/App.java b/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/App.java
index 92dcf22..3e4f465 100644
--- a/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/App.java
+++ b/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/App.java
@@ -2,50 +2,34 @@
  * Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
+ * terms of the Eclipse Distribution License v. 1.0, which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
  *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ * SPDX-License-Identifier: BSD-3-Clause
  */
 
 package org.glassfish.jersey.examples.micrometer;
 
+import org.glassfish.grizzly.http.server.HttpServer;
+import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
+
 import java.io.IOException;
 import java.net.URI;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import io.micrometer.core.instrument.MeterRegistry;
-import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
-import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
-import org.glassfish.jersey.micrometer.server.DefaultJerseyTagsProvider;
-import org.glassfish.jersey.micrometer.server.MetricsApplicationEventListener;
-import org.glassfish.jersey.server.ResourceConfig;
-
-import org.glassfish.grizzly.http.server.HttpServer;
-
 public class App {
 
     private static final URI BASE_URI = URI.create("http://localhost:8080/micro/");
-    public static final String ROOT_PATH = "meter";
+    public static final String WEB_PATH = "/micro/";
 
     public static void main(String[] args) {
         try {
             System.out.println("Micrometer/ Jersey Basic Example App");
 
-            final MeterRegistry registry = new SimpleMeterRegistry();
-
-            final ResourceConfig resourceConfig = new ResourceConfig(MicrometerResource.class)
-                    .register(new MetricsApplicationEventListener(registry, new DefaultJerseyTagsProvider(),
-                    "http.shared.metrics", true))
-                    .register(new MetricsResource(registry));
-            final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(BASE_URI, resourceConfig, false);
+            final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(BASE_URI,
+                    new MetricsResourceConfig(),
+                    false);
             Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
                 @Override
                 public void run() {
@@ -55,9 +39,9 @@
             server.start();
 
             System.out.println(String.format("Application started.\nTry out                        %s%s\n"
-                            + "After several requests go to   %s%s\nAnd after that go to the       %s%s\n"
+                            + "And after that go to the       %s%s\n"
                             + "Stop the application using CTRL+C",
-                    BASE_URI, ROOT_PATH, BASE_URI, "metrics", BASE_URI, "metrics/metrics"));
+                    BASE_URI, "timed", BASE_URI, "metrics"));
             Thread.currentThread().join();
         } catch (IOException | InterruptedException ex) {
             Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
diff --git a/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/MetricsResource.java b/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/MetricsResource.java
index 60e9194..28f1f11 100644
--- a/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/MetricsResource.java
+++ b/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/MetricsResource.java
@@ -2,71 +2,28 @@
  * Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
+ * terms of the Eclipse Distribution License v. 1.0, which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
  *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ * SPDX-License-Identifier: BSD-3-Clause
  */
 
 package org.glassfish.jersey.examples.micrometer;
 
-import io.micrometer.core.instrument.Meter;
-import io.micrometer.core.instrument.MeterRegistry;
-import io.micrometer.core.instrument.Timer;
-
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
-import java.util.concurrent.TimeUnit;
+
+import static org.glassfish.jersey.examples.micrometer.App.WEB_PATH;
 
 @Path("metrics")
 public class MetricsResource {
 
-    private final MeterRegistry registry;
-
-    public MetricsResource(MeterRegistry registry) {
-        this.registry = registry;
-    }
-
     @GET
-    @Produces("text/plain")
+    @Produces("text/html")
     public String getMeters() {
-        final StringBuffer result = new StringBuffer();
-        try {
-            result.append("Listing available meters: ");
-            for (final Meter meter : registry.getMeters()) {
-                result.append(meter.getId().getName());
-                result.append("; ");
-            }
-        } catch (Exception ex) {
-            System.out.println(ex);
-            result.append("Exception occured, see log for details...");
-            result.append(ex.toString());
-        }
-        return result.toString();
+       return "<html><body>Gaining measurements for the summary page, try <a href=\""
+               + WEB_PATH + "summary\">summary</a>. If you want more measurements just refresh this page several times."
+               + "</body></html>";
     }
-    @GET
-    @Path("metrics")
-    @Produces("text/plain")
-    public String getMetrics() {
-        final StringBuffer result = new StringBuffer();
-        try {
-            final Timer timer = registry.get("http.shared.metrics")
-                    .tags("method", "GET", "uri", "/micro/meter", "status", "200", "exception", "None", "outcome", "SUCCESS")
-                    .timer();
-            result.append(String.format("Overall requests counts: %d, total time (millis): %f",
-                    timer.count(), timer.totalTime(TimeUnit.MILLISECONDS)));
-        } catch (Exception ex) {
-            System.out.println(ex);
-            result.append("Exception occured, see log for details...");
-            result.append(ex.toString());
-        }
-        return result.toString();
-    }
-}
+}
\ No newline at end of file
diff --git a/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/MetricsResourceConfig.java b/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/MetricsResourceConfig.java
new file mode 100644
index 0000000..6ce457c
--- /dev/null
+++ b/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/MetricsResourceConfig.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0, which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.glassfish.jersey.examples.micrometer;
+
+import org.glassfish.jersey.internal.inject.AbstractBinder;
+import org.glassfish.jersey.server.ResourceConfig;
+
+import javax.ws.rs.ApplicationPath;
+
+@ApplicationPath("/")
+public class MetricsResourceConfig extends ResourceConfig {
+
+    private final MetricsStore store = new MetricsStore();
+
+    public MetricsResourceConfig() {
+        register(new AbstractBinder() {
+            @Override
+            protected void configure() {
+                bind(store).to(MetricsStore.class);
+            }
+        });
+        register(store.getMetricsApplicationEventListener());
+        register(TimedResource.class);
+        register(MetricsResource.class);
+        register(SummaryResource.class);
+    }
+
+    public MetricsStore getStore() {
+        return store;
+    }
+}
diff --git a/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/MetricsStore.java b/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/MetricsStore.java
new file mode 100644
index 0000000..01eaed8
--- /dev/null
+++ b/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/MetricsStore.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0, which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.glassfish.jersey.examples.micrometer;
+
+import io.micrometer.core.instrument.MeterRegistry;
+import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
+import org.glassfish.jersey.micrometer.server.DefaultJerseyTagsProvider;
+import org.glassfish.jersey.micrometer.server.MetricsApplicationEventListener;
+
+public class MetricsStore {
+
+    public static final String REGISTRY_NAME = "http.shared.metrics";
+    private final MetricsApplicationEventListener metricsApplicationEventListener;
+    private final MeterRegistry registry = new SimpleMeterRegistry();
+
+    public MetricsStore() {
+        metricsApplicationEventListener = new MetricsApplicationEventListener(registry,
+                new DefaultJerseyTagsProvider(),
+                REGISTRY_NAME, true);
+    }
+
+    public MetricsApplicationEventListener getMetricsApplicationEventListener() {
+        return metricsApplicationEventListener;
+    }
+
+    public MeterRegistry getRegistry() {
+        return registry;
+    }
+}
\ No newline at end of file
diff --git a/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/MicrometerResource.java b/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/MicrometerResource.java
deleted file mode 100644
index 7ff1083..0000000
--- a/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/MicrometerResource.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.glassfish.jersey.examples.micrometer;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-
-@Path("meter")
-public class MicrometerResource {
-    public static final String CLICHED_MESSAGE = "Hello World!";
-
-    @GET
-    @Produces("text/plain")
-    public String getHello() {
-        return CLICHED_MESSAGE;
-    }
-
-}
diff --git a/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/SummaryResource.java b/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/SummaryResource.java
new file mode 100644
index 0000000..5f82d15
--- /dev/null
+++ b/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/SummaryResource.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0, which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.glassfish.jersey.examples.micrometer;
+
+import io.micrometer.core.instrument.Meter;
+import io.micrometer.core.instrument.Timer;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import java.util.concurrent.TimeUnit;
+
+import static org.glassfish.jersey.examples.micrometer.App.WEB_PATH;
+import static org.glassfish.jersey.examples.micrometer.MetricsStore.REGISTRY_NAME;
+
+@Path("summary")
+public class SummaryResource {
+
+    @Context
+    private MetricsStore store;
+
+    @GET
+    @Produces("text/html")
+    public String getExtendedMeters() {
+        final StringBuffer result = new StringBuffer();
+        try {
+            result.append("<html><body>"
+                    + "Listing available meters<br/><br/>Many occurrences of the same name means that there are more meters"
+                    + " which could be used with different tags,"
+                    + " but this is actually a challenge to handle all available metrics :<br/><br/> ");
+            for (final Meter meter : store.getRegistry().getMeters()) {
+                result.append(meter.getId().getName());
+                result.append(";<br/>\n\r ");
+            }
+        } catch (Exception ex) {
+            result.append("Try clicking links below to gain more metrics.<br/>");
+        }
+        result.append("<br/>\n\r ");
+        result.append("<br/>\n\r ");
+        try {
+            final Timer timer = store.getRegistry().get(REGISTRY_NAME)
+                    .tags("method", "GET", "status", "200", "exception", "None",
+                            "outcome", "SUCCESS", "uri", "/micro/metrics")
+                    .timer();
+
+            result.append(
+                    String.format("Counts to the page with standard measurements: %d, time spent on requests to the init "
+                            + "page (millis): %f <br/>\n\r",
+                    timer.count(), timer.totalTime(TimeUnit.MILLISECONDS)));
+
+            final Timer annotatedTimer = store.getRegistry().timer(TimedResource.TIMER_NAME,
+                    "method", "GET", "status", "200", "exception", "None",
+                    "outcome", "SUCCESS", "uri", "/micro/timed");
+
+            result.append(
+                    String.format("Counts to the page with annotated measurements: %d, total time (millis): %f <br/>\n\r",
+                    annotatedTimer.count(), annotatedTimer.totalTime(TimeUnit.MILLISECONDS)));
+
+        } catch (Exception ex) {
+            result.append(String.format("Counts to the init page: %d, total time (millis): %d <br/>\n\r",
+                    0, 0));
+            result.append("Try clicking links below to gain more metrics.<br/>");
+        }
+        result.append("<br/><br/>Available pages for measurements: <a href=\""
+                + WEB_PATH + "metrics\">measure requests in the standard way</a> &nbsp;, <a href=\""
+                + WEB_PATH + "timed\">measure requests in the annotated way</a>");
+        return result.append("</body></html>").toString();
+    }
+}
diff --git a/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/TimedResource.java b/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/TimedResource.java
new file mode 100644
index 0000000..654cba4
--- /dev/null
+++ b/examples/micrometer/src/main/java/org/glassfish/jersey/examples/micrometer/TimedResource.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0, which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.glassfish.jersey.examples.micrometer;
+
+import io.micrometer.core.annotation.Timed;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import static org.glassfish.jersey.examples.micrometer.App.WEB_PATH;
+
+@Path("timed")
+public class TimedResource {
+
+    public static final String MESSAGE = "<html><body>Gaining measures in the annotated way. "
+            + "<br/>Take a look at <a href=\"" + WEB_PATH + "metrics\">the standard way of measurements</a><br/> "
+            + "Or just go to <a href=\"" + WEB_PATH + "summary\">summary</a> to check what you've got</body></html>";
+    public static final String TIMER_NAME = "http.timers";
+    public static final String TIMER_DESCRIPTION = "resource measurement timer";
+
+    @GET
+    @Produces("text/html")
+    @Timed(value = TIMER_NAME, description = TIMER_DESCRIPTION, histogram = true)
+    public String getTimedMessage() {
+        return MESSAGE;
+    }
+}
diff --git a/examples/micrometer/src/test/java/org/glassfish/jersey/examples/micrometer/MicrometerTest.java b/examples/micrometer/src/test/java/org/glassfish/jersey/examples/micrometer/MicrometerTest.java
index 4a5f4ee..e8612c4 100644
--- a/examples/micrometer/src/test/java/org/glassfish/jersey/examples/micrometer/MicrometerTest.java
+++ b/examples/micrometer/src/test/java/org/glassfish/jersey/examples/micrometer/MicrometerTest.java
@@ -2,63 +2,52 @@
  * Copyright (c) 2023 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
+ * terms of the Eclipse Distribution License v. 1.0, which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
  *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ * SPDX-License-Identifier: BSD-3-Clause
  */
 
 package org.glassfish.jersey.examples.micrometer;
 
-import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Timer;
-import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
-import org.glassfish.jersey.micrometer.server.DefaultJerseyTagsProvider;
-import org.glassfish.jersey.micrometer.server.MetricsApplicationEventListener;
 import org.glassfish.jersey.test.JerseyTest;
-import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Application;
-
 import java.util.concurrent.TimeUnit;
 
-import static org.glassfish.jersey.examples.micrometer.MicrometerResource.CLICHED_MESSAGE;
+import static org.glassfish.jersey.examples.micrometer.TimedResource.MESSAGE;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class MicrometerTest extends JerseyTest {
 
-    static final String TIMER_METRIC_NAME = "http.server.requests";
+    static final int REQUESTS_COUNT = 10;
 
-    MeterRegistry registry;
+    private MetricsResourceConfig resourceConfig;
 
     @Override
     protected Application configure() {
-        registry = new SimpleMeterRegistry();
-        MetricsApplicationEventListener metricsListener = new MetricsApplicationEventListener(registry,
-                new DefaultJerseyTagsProvider(), TIMER_METRIC_NAME, true);
-        return new ResourceConfig(MicrometerResource.class)
-                .register(metricsListener)
-                .register(new MetricsResource(registry));
+        resourceConfig = new MetricsResourceConfig();
+        assertNotNull(this.resourceConfig);
+        return this.resourceConfig;
     }
 
     @Test
     void meterResourceTest() throws InterruptedException {
-        String response = target("/meter").request().get(String.class);
-        assertEquals(response, CLICHED_MESSAGE);
+        final String response = target("/timed").request().get(String.class);
+        assertEquals(response, MESSAGE);
+        for (int i = 0; i < REQUESTS_COUNT; i++) {
+            target("/metrics").request().get(String.class);
+        }
         // Jersey metrics are recorded asynchronously to the request completing
         Thread.sleep(10);
-        Timer timer = registry.get(TIMER_METRIC_NAME)
-                .tags("method", "GET", "uri", "/meter", "status", "200", "exception", "None", "outcome", "SUCCESS")
+        Timer timer = resourceConfig.getStore().getRegistry()
+                .get(MetricsStore.REGISTRY_NAME)
+                .tags("method", "GET", "uri", "/metrics", "status", "200", "exception", "None", "outcome", "SUCCESS")
                 .timer();
-        assertEquals(timer.count(), 1);
+        assertEquals(REQUESTS_COUNT, timer.count());
         assertNotNull(timer.totalTime(TimeUnit.NANOSECONDS));
     }
 
diff --git a/ext/microprofile/pom.xml b/ext/microprofile/pom.xml
index cccbb17..647b7b3 100644
--- a/ext/microprofile/pom.xml
+++ b/ext/microprofile/pom.xml
@@ -33,8 +33,7 @@
 
     <modules>
         <module>mp-rest-client</module>
-	<module>mp-config</module>
+        <module>mp-config</module>
     </modules>
 
-
-</project>
+</project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 576f8c6..53357ac 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1171,7 +1171,7 @@
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-project-info-reports-plugin</artifactId>
-                        <version>2.7</version>
+                        <version>3.4.5</version>
                         <reportSets>
                             <reportSet>
                                 <reports>
@@ -2323,7 +2323,7 @@
         <jsp.version>2.3.6</jsp.version>
         <jstl.version>1.2.7</jstl.version>
         <jta.api.version>1.3.3</jta.api.version>
-        <micrometer.version>1.10.10</micrometer.version>
+        <micrometer.version>1.10.12</micrometer.version>
         <micrometer-tracing.version>1.0.9</micrometer-tracing.version>
         <microprofile.config.version>2.0.1</microprofile.config.version>
         <microprofile.rest.client.version>2.0</microprofile.rest.client.version>
