starting to impl the rest endpoint
diff --git a/pom.xml b/pom.xml
index 0f3cefc..f8d9650 100644
--- a/pom.xml
+++ b/pom.xml
@@ -168,10 +168,8 @@
         <artifactId>maven-surefire-plugin</artifactId>
         <version>2.21.0</version>
         <configuration>
-          <!-- current setup has some leakage it seems
-          <forkCount>1</forkCount>
+          <forkCount>2</forkCount>
           <reuseForks>false</reuseForks>
-          -->
           <dependenciesToScan>
             <dependency>org.eclipse.microprofile.metrics:microprofile-metrics-api-tck</dependency>
             <dependency>org.eclipse.microprofile.metrics:microprofile-metrics-rest-tck</dependency>
@@ -179,6 +177,9 @@
           <environmentVariables>
             <MP_METRICS_TAGS>tier=integration</MP_METRICS_TAGS>
           </environmentVariables>
+          <systemPropertyVariables>
+            <geronimo.metrics.jaxrs.activated>true</geronimo.metrics.jaxrs.activated>
+          </systemPropertyVariables>
         </configuration>
       </plugin>
       <plugin>
diff --git a/src/main/java/org/apache/geronimo/microprofile/metrics/cdi/MetricsExtension.java b/src/main/java/org/apache/geronimo/microprofile/metrics/cdi/MetricsExtension.java
index 87fbb43..1f50cde 100644
--- a/src/main/java/org/apache/geronimo/microprofile/metrics/cdi/MetricsExtension.java
+++ b/src/main/java/org/apache/geronimo/microprofile/metrics/cdi/MetricsExtension.java
@@ -42,6 +42,7 @@
 
 import org.apache.geronimo.microprofile.metrics.impl.GaugeImpl;
 import org.apache.geronimo.microprofile.metrics.impl.RegistryImpl;
+import org.apache.geronimo.microprofile.metrics.jaxrs.MetricsEndpoints;
 import org.eclipse.microprofile.metrics.Counter;
 import org.eclipse.microprofile.metrics.Gauge;
 import org.eclipse.microprofile.metrics.Histogram;
@@ -64,6 +65,12 @@
     private final Map<String, Function<BeanManager, Gauge<?>>> gaugeFactories = new HashMap<>();
     private final Collection<CreationalContext<?>> creationalContexts = new ArrayList<>();
 
+    void letOtherExtensionsUseRegistries(@Observes final ProcessAnnotatedType<MetricsEndpoints> processAnnotatedType) {
+        if (!Boolean.getBoolean("geronimo.metrics.jaxrs.activated")) {
+            processAnnotatedType.veto();
+        }
+    }
+
     void letOtherExtensionsUseRegistries(@Observes final BeforeBeanDiscovery beforeBeanDiscovery, final BeanManager beanManager) {
         beforeBeanDiscovery.addQualifier(RegistryType.class);
         beanManager.fireEvent(applicationRegistry);
diff --git a/src/main/java/org/apache/geronimo/microprofile/metrics/impl/HistogramImpl.java b/src/main/java/org/apache/geronimo/microprofile/metrics/impl/HistogramImpl.java
index edd7c00..c6ff674 100644
--- a/src/main/java/org/apache/geronimo/microprofile/metrics/impl/HistogramImpl.java
+++ b/src/main/java/org/apache/geronimo/microprofile/metrics/impl/HistogramImpl.java
@@ -47,6 +47,46 @@
         return new SnapshotImpl(values.toArray(EMPTY_VALUES_ARRAY));
     }
 
+    public double getP50() {
+        return getSnapshot().getMedian();
+    }
+
+    public double getP75() {
+        return getSnapshot().get75thPercentile();
+    }
+
+    public double getP95() {
+        return getSnapshot().get95thPercentile();
+    }
+
+    public double getP98() {
+        return getSnapshot().get98thPercentile();
+    }
+
+    public double getP99() {
+        return getSnapshot().get99thPercentile();
+    }
+
+    public double getP999() {
+        return getSnapshot().get999thPercentile();
+    }
+
+    public long getMax() {
+        return getSnapshot().getMax();
+    }
+
+    public double getMean() {
+        return getSnapshot().getMean();
+    }
+
+    public long getMin() {
+        return getSnapshot().getMin();
+    }
+
+    public double getStdDev() {
+        return getSnapshot().getStdDev();
+    }
+
     // cheap way to avoid to explode the mem for nothing
     private void refresh() {
         final long now = System.nanoTime();
diff --git a/src/main/java/org/apache/geronimo/microprofile/metrics/impl/MeterImpl.java b/src/main/java/org/apache/geronimo/microprofile/metrics/impl/MeterImpl.java
index 631900b..5eddc83 100644
--- a/src/main/java/org/apache/geronimo/microprofile/metrics/impl/MeterImpl.java
+++ b/src/main/java/org/apache/geronimo/microprofile/metrics/impl/MeterImpl.java
@@ -40,20 +40,6 @@
         rate15.update(n);
     }
 
-    private void doRefresh() {
-        final long now = System.nanoTime();
-        final long lastUpdateNs = lastUpdate.get();
-        final long elaspsedTime = now - lastUpdateNs;
-        if (elaspsedTime > INTERVAL_NS && lastUpdate.compareAndSet(lastUpdateNs, now)) {
-            final long diff = elaspsedTime / INTERVAL_NS;
-            for (long it = 0; it < diff; it++) { // simulate time, avoids a background thread
-                rate1.refresh();
-                rate5.refresh();
-                rate15.refresh();
-            }
-        }
-    }
-
     @Override
     public long getCount() {
         return count.sum();
@@ -86,6 +72,20 @@
         return count / TimeUnit.NANOSECONDS.toSeconds(System.nanoTime() - initNs);
     }
 
+    private void doRefresh() {
+        final long now = System.nanoTime();
+        final long lastUpdateNs = lastUpdate.get();
+        final long elaspsedTime = now - lastUpdateNs;
+        if (elaspsedTime > INTERVAL_NS && lastUpdate.compareAndSet(lastUpdateNs, now)) {
+            final long diff = elaspsedTime / INTERVAL_NS;
+            for (long it = 0; it < diff; it++) { // simulate time, avoids a background thread
+                rate1.refresh();
+                rate5.refresh();
+                rate15.refresh();
+            }
+        }
+    }
+
     private static class Rate {
         private volatile double value = 0;
 
diff --git a/src/main/java/org/apache/geronimo/microprofile/metrics/impl/TimerImpl.java b/src/main/java/org/apache/geronimo/microprofile/metrics/impl/TimerImpl.java
index 1eb053d..9777164 100644
--- a/src/main/java/org/apache/geronimo/microprofile/metrics/impl/TimerImpl.java
+++ b/src/main/java/org/apache/geronimo/microprofile/metrics/impl/TimerImpl.java
@@ -81,6 +81,46 @@
         return histogram.getSnapshot();
     }
 
+    public double getP50() {
+        return getSnapshot().getMedian();
+    }
+
+    public double getP75() {
+        return getSnapshot().get75thPercentile();
+    }
+
+    public double getP95() {
+        return getSnapshot().get95thPercentile();
+    }
+
+    public double getP98() {
+        return getSnapshot().get98thPercentile();
+    }
+
+    public double getP99() {
+        return getSnapshot().get99thPercentile();
+    }
+
+    public double getP999() {
+        return getSnapshot().get999thPercentile();
+    }
+
+    public long getMax() {
+        return getSnapshot().getMax();
+    }
+
+    public double getMean() {
+        return getSnapshot().getMean();
+    }
+
+    public long getMin() {
+        return getSnapshot().getMin();
+    }
+
+    public double getStdDev() {
+        return getSnapshot().getStdDev();
+    }
+
     private class ContextImpl implements Context {
         private final long start = System.nanoTime();
 
diff --git a/src/main/java/org/apache/geronimo/microprofile/metrics/jaxrs/MetricsEndpoints.java b/src/main/java/org/apache/geronimo/microprofile/metrics/jaxrs/MetricsEndpoints.java
new file mode 100644
index 0000000..e31760f
--- /dev/null
+++ b/src/main/java/org/apache/geronimo/microprofile/metrics/jaxrs/MetricsEndpoints.java
@@ -0,0 +1,76 @@
+package org.apache.geronimo.microprofile.metrics.jaxrs;
+
+import static java.util.Collections.singletonMap;
+import static java.util.Locale.ROOT;
+import static java.util.stream.Collectors.toMap;
+import static org.eclipse.microprofile.metrics.MetricRegistry.Type.BASE;
+import static org.eclipse.microprofile.metrics.MetricRegistry.Type.VENDOR;
+
+import java.util.stream.Stream;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.OPTIONS;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.eclipse.microprofile.metrics.MetricRegistry;
+import org.eclipse.microprofile.metrics.annotation.RegistryType;
+
+// TODO: ensure this is NOT deployed out of the box, this is a security hole!
+@Path("metrics")
+@ApplicationScoped
+@Produces(MediaType.APPLICATION_JSON)
+public class MetricsEndpoints {
+    @Inject
+    @RegistryType(type = BASE)
+    private MetricRegistry baseRegistry;
+
+    @Inject
+    @RegistryType(type = VENDOR)
+    private MetricRegistry vendorRegistry;
+
+    @Inject
+    private MetricRegistry applicationRegistry;
+
+    @GET
+    public Object get() {
+        return Stream.of(MetricRegistry.Type.values())
+                .collect(toMap(MetricRegistry.Type::getName, it -> findRegistry(it.getName())));
+    }
+
+    @GET
+    @Path("{registry}")
+    public Object get(@PathParam("registry") final String registry) {
+        return findRegistry(registry).getMetrics();
+    }
+
+    @GET
+    @Path("{registry}/{metric}")
+    public Object get(@PathParam("registry") final String registry,
+                                   @PathParam("metric") final String name) {
+        return singletonMap(name, findRegistry(registry).getMetrics().get(name));
+    }
+
+    @OPTIONS
+    @Path("{registry}/{metric}")
+    public Object options(@PathParam("registry") final String registry,
+                                   @PathParam("metric") final String name) {
+        return singletonMap(name, findRegistry(registry).getMetadata().get(name));
+    }
+
+    private MetricRegistry findRegistry(final String registry) {
+        switch (Stream.of(MetricRegistry.Type.values()).filter(it -> it.getName().equals(registry)).findFirst()
+                .orElseThrow(() -> new IllegalArgumentException(registry + " is not a valid registry"))) {
+            case BASE:
+                return baseRegistry;
+            case VENDOR:
+                return vendorRegistry;
+            default:
+                return applicationRegistry;
+        }
+    }
+}