diff --git a/Example.hs b/Example.hs
--- a/Example.hs
+++ b/Example.hs
@@ -3,7 +3,7 @@
 module Example where
 
 import           Control.Monad.IO.Class                         (liftIO)
-import           System.Metrics.Prometheus.Http.Scrape          (serveHttpTextMetricsT)
+import           System.Metrics.Prometheus.Http.Scrape          (serveMetricsT)
 import           System.Metrics.Prometheus.Concurrent.RegistryT
 import           System.Metrics.Prometheus.Metric.Counter       (inc)
 import           System.Metrics.Prometheus.MetricId
@@ -20,4 +20,4 @@
 
     -- [...] pass metric handles to the rest of the app
 
-    serveHttpTextMetricsT 8080 ["metrics"] -- http://localhost:8080/metric server
+    serveMetricsT 8080 ["metrics"] -- http://localhost:8080/metric server
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -25,7 +25,7 @@
 module Example where
 
 import           Control.Monad.IO.Class                         (liftIO)
-import           System.Metrics.Prometheus.Http.Scrape          (serveHttpTextMetricsT)
+import           System.Metrics.Prometheus.Http.Scrape          (serveMetricsT)
 import           System.Metrics.Prometheus.Concurrent.RegistryT
 import           System.Metrics.Prometheus.Metric.Counter       (inc)
 import           System.Metrics.Prometheus.MetricId
@@ -42,7 +42,7 @@
 
     -- [...] pass metric handles to the rest of the app
 
-    serveHttpTextMetricsT 8080 ["metrics"] -- http://localhost:8080/metric server
+    serveMetricsT 8080 ["metrics"] -- http://localhost:8080/metric server
 ```
 
 ## Advanced Usage
@@ -50,6 +50,16 @@
 A `Registry` and `StateT`-based `RegistryT` are available for unit
 testing or generating lists of `[IO a]` actions that can be
 `sequenced` and returned from pure code to be applied.
+
+## Concurrency Model
+
+Metrics are "values" and the Registry is the map of "name_labels" to metric "keys".
+
+Metrics may be created/registered at any point, not just at start up, in the `RegistryT` monad transformer. Thread the `RegistryT` through your transformer stack to tell the type system you intend to register new metrics in that call stack. The `RegistryT` has a thread safe version in the `Concurrent` module.
+
+The metrics are thread safe on their own and do not require locking the entire registry to update them. They use high performance check-and-set atomic primitives. This is because metrics may be updated many times in between scrapes where the Reigstry needs to be lock. You do NOT want to lock all the metrics just to update one.
+
+The scraping operation of the server to collect all the metrics locks the registry to ensure no new metrics are being created/keyed in a race with the scrape.
 
 ## Tasks
 
diff --git a/prometheus.cabal b/prometheus.cabal
--- a/prometheus.cabal
+++ b/prometheus.cabal
@@ -1,5 +1,5 @@
 name:                prometheus
-version:             2.1.3
+version:             2.2.1
 synopsis:            Prometheus Haskell Client
 homepage:            http://github.com/bitnomial/prometheus
 bug-reports:         http://github.com/bitnomial/prometheus/issues
@@ -7,7 +7,7 @@
 license-file:        LICENSE
 author:              Luke Hoersten
 maintainer:          luke@bitnomial.com, opensource@bitnomial.com
-copyright:           Bitnomial, Inc. (c) 2016-2018
+copyright:           Bitnomial, Inc. (c) 2016-2019
 category:            Metrics, Monitoring, Web, System
 build-type:          Simple
 cabal-version:       >=1.10
@@ -31,7 +31,7 @@
   > module Example where
   >
   > import           Control.Monad.IO.Class                         (liftIO)
-  > import           System.Metrics.Prometheus.Http.Scrape          (serveHttpTextMetricsT)
+  > import           System.Metrics.Prometheus.Http.Scrape          (serveMetricsT)
   > import           System.Metrics.Prometheus.Concurrent.RegistryT
   > import           System.Metrics.Prometheus.Metric.Counter       (inc)
   > import           System.Metrics.Prometheus.MetricId
@@ -48,7 +48,7 @@
   >
   >     -- [...] pass metric handles to the rest of the app
   >
-  >     serveHttpTextMetricsT 8080 ["metrics"] -- http://localhost:8080/metric server
+  >     serveMetricsT 8080 ["metrics"] -- http://localhost:8080/metric server
   >
   .
   [Advanced Usage]
@@ -82,18 +82,18 @@
                  , System.Metrics.Prometheus.Registry
                  , System.Metrics.Prometheus.RegistryT
 
-  build-depends: base           >= 4.9  && < 4.14
-               , atomic-primops >= 0.8  && < 0.9
-               , bytestring     >= 0.10 && < 0.11
-               , containers     >= 0.5  && < 0.7
-               , http-client    >= 0.4  && < 0.7
+  build-depends: base            >= 4.9  && < 5
+               , atomic-primops  >= 0.8  && < 0.9
+               , bytestring      >= 0.10 && < 0.11
+               , containers      >= 0.5  && < 0.7
+               , http-client     >= 0.4  && < 0.7
                , http-client-tls >= 0.3  && < 0.4
-               , http-types     >= 0.8  && < 0.13
-               , network-uri    >= 2.5  && < 2.7
-               , text           >= 1.2  && < 1.3
-               , transformers   >= 0.4  && < 0.6
-               , wai            >= 3.2  && < 3.3
-               , warp           >= 3.2  && < 3.5
+               , http-types      >= 0.8  && < 0.13
+               , network-uri     >= 2.5  && < 2.7
+               , text            >= 1.2  && < 1.3
+               , transformers    >= 0.4  && < 0.6
+               , wai             >= 3.2  && < 3.3
+               , warp            >= 3.2  && < 3.5
 
 source-repository head
   type:     git
diff --git a/src/System/Metrics/Prometheus/Http/Scrape.hs b/src/System/Metrics/Prometheus/Http/Scrape.hs
--- a/src/System/Metrics/Prometheus/Http/Scrape.hs
+++ b/src/System/Metrics/Prometheus/Http/Scrape.hs
@@ -2,8 +2,8 @@
 
 module System.Metrics.Prometheus.Http.Scrape
        ( Path
-       , serveHttpTextMetrics
-       , serveHttpTextMetricsT
+       , serveMetrics
+       , serveMetricsT
        , prometheusApp
        )
        where
@@ -40,12 +40,12 @@
 type Path = [Text]
 
 
-serveHttpTextMetrics :: MonadIO m => Port -> Path -> IO RegistrySample -> m ()
-serveHttpTextMetrics port path = liftIO . run port . prometheusApp path
+serveMetrics :: MonadIO m => Port -> Path -> IO RegistrySample -> m ()
+serveMetrics port path = liftIO . run port . prometheusApp path
 
 
-serveHttpTextMetricsT :: MonadIO m => Port -> Path -> RegistryT m ()
-serveHttpTextMetricsT port path = liftIO . serveHttpTextMetrics port path =<< sample
+serveMetricsT :: MonadIO m => Port -> Path -> RegistryT m ()
+serveMetricsT port path = liftIO . serveMetrics port path =<< sample
 
 
 prometheusApp :: Path -> IO RegistrySample -> Application
