diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,10 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
 and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html)
 
+## 0.64.4
+### Fixed
+- Bring dots back and avoid stats hacks.
+
 ## 0.64.3
 ### Fixed
 - Fix typo.
diff --git a/haskoin-store.cabal b/haskoin-store.cabal
--- a/haskoin-store.cabal
+++ b/haskoin-store.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           haskoin-store
-version:        0.64.3
+version:        0.64.4
 synopsis:       Storage and index for Bitcoin and Bitcoin Cash
 description:    Please see the README on GitHub at <https://github.com/haskoin/haskoin-store#readme>
 category:       Bitcoin, Finance, Network
@@ -60,7 +60,7 @@
     , hashable >=1.3.0.0
     , haskoin-core >=0.21.1
     , haskoin-node >=0.17.0
-    , haskoin-store-data ==0.64.3
+    , haskoin-store-data ==0.64.4
     , hedis >=0.12.13
     , http-types >=0.12.3
     , lens >=4.18.1
@@ -116,7 +116,7 @@
     , haskoin-core >=0.21.1
     , haskoin-node >=0.17.0
     , haskoin-store
-    , haskoin-store-data ==0.64.3
+    , haskoin-store-data ==0.64.4
     , hedis >=0.12.13
     , http-types >=0.12.3
     , lens >=4.18.1
@@ -177,7 +177,7 @@
     , haskoin-core >=0.21.1
     , haskoin-node >=0.17.0
     , haskoin-store
-    , haskoin-store-data ==0.64.3
+    , haskoin-store-data ==0.64.4
     , hedis >=0.12.13
     , hspec >=2.7.1
     , http-types >=0.12.3
diff --git a/src/Haskoin/Store/BlockStore.hs b/src/Haskoin/Store/BlockStore.hs
--- a/src/Haskoin/Store/BlockStore.hs
+++ b/src/Haskoin/Store/BlockStore.hs
@@ -229,11 +229,11 @@
 
 newStoreMetrics :: MonadIO m => Metrics.Store -> m StoreMetrics
 newStoreMetrics s = liftIO $ do
-    storeHeight <- g "blockchain_height"
-    headersHeight <- g "blockchain_headers"
-    storePendingTxs <- g "mempool_pending_txs"
-    storePeersConnected <- g "network_peers_connected"
-    storeMempoolSize <- g "mempool_size"
+    storeHeight <- g "blockchain.height"
+    headersHeight <- g "blockchain.headers"
+    storePendingTxs <- g "mempool.pending_txs"
+    storePeersConnected <- g "network.peers_connected"
+    storeMempoolSize <- g "mempool.size"
     return StoreMetrics{..}
   where
     g x = Metrics.createGauge ("store." <> x) s
diff --git a/src/Haskoin/Store/Cache.hs b/src/Haskoin/Store/Cache.hs
--- a/src/Haskoin/Store/Cache.hs
+++ b/src/Haskoin/Store/Cache.hs
@@ -205,17 +205,17 @@
 
 newCacheMetrics :: MonadIO m => Metrics.Store -> m CacheMetrics
 newCacheMetrics s = liftIO $ do
-    cacheHits <- c "cache_hits"
-    cacheMisses <- c "cache_misses"
-    cacheLockAcquired <- c "cache_lock_acquired"
-    cacheLockReleased <- c "cache_lock_released"
-    cacheLockFailed <- c "cache_lock_failed"
-    cacheIndexTime <- d "cache_index"
-    cacheBlockSyncTime <- d "cache_block_sync"
-    cacheXPubBals <- c "cache_xpub_balances"
-    cacheXPubUnspents <- c "cache_xpub_unspents"
-    cacheXPubTxs <- c "cache_xpub_txs"
-    cacheXPubTxCount <- c "cache_xpub_tx_count"
+    cacheHits <- c "cache.hits"
+    cacheMisses <- c "cache.misses"
+    cacheLockAcquired <- c "cache.lock_acquired"
+    cacheLockReleased <- c "cache.lock_released"
+    cacheLockFailed <- c "cache.lock_failed"
+    cacheIndexTime <- d "cache.index"
+    cacheBlockSyncTime <- d "cache.block_sync"
+    cacheXPubBals <- c "cache.xpub_balances"
+    cacheXPubUnspents <- c "cache.xpub_unspents"
+    cacheXPubTxs <- c "cache.xpub_txs"
+    cacheXPubTxCount <- c "cache.xpub_tx_count"
     return CacheMetrics{..}
   where
     c x = Metrics.createCounter x s
diff --git a/src/Haskoin/Store/Common.hs b/src/Haskoin/Store/Common.hs
--- a/src/Haskoin/Store/Common.hs
+++ b/src/Haskoin/Store/Common.hs
@@ -448,16 +448,16 @@
 
 createDataMetrics :: MonadIO m => Metrics.Store -> m DataMetrics
 createDataMetrics s = liftIO $ do
-    dataBestCount <- Metrics.createCounter "data_best_block" s
-    dataBlockCount <- Metrics.createCounter "data_blocks" s
-    dataTxCount <- Metrics.createCounter "data_txs" s
-    dataSpenderCount <- Metrics.createCounter "data_spenders" s
-    dataMempoolCount <- Metrics.createCounter "data_mempool" s
-    dataBalanceCount <- Metrics.createCounter "data_balances" s
-    dataUnspentCount <- Metrics.createCounter "data_unspents" s
-    dataAddrTxCount <- Metrics.createCounter "data_address_txs" s
-    dataXPubBals <- Metrics.createCounter "data_xpub_balances" s
-    dataXPubUnspents <- Metrics.createCounter "data_xpub_unspents" s
-    dataXPubTxs <- Metrics.createCounter "data_xpub_txs" s
-    dataXPubTxCount <- Metrics.createCounter "data_xpub_tx_count" s
+    dataBestCount <- Metrics.createCounter "data.best_block" s
+    dataBlockCount <- Metrics.createCounter "data.blocks" s
+    dataTxCount <- Metrics.createCounter "data.txs" s
+    dataSpenderCount <- Metrics.createCounter "data.spenders" s
+    dataMempoolCount <- Metrics.createCounter "data.mempool" s
+    dataBalanceCount <- Metrics.createCounter "data.balances" s
+    dataUnspentCount <- Metrics.createCounter "data.unspents" s
+    dataAddrTxCount <- Metrics.createCounter "data.address_txs" s
+    dataXPubBals <- Metrics.createCounter "data.xpub_balances" s
+    dataXPubUnspents <- Metrics.createCounter "data.xpub_unspents" s
+    dataXPubTxs <- Metrics.createCounter "data.xpub_txs" s
+    dataXPubTxCount <- Metrics.createCounter "data.xpub_tx_count" s
     return DataMetrics{..}
diff --git a/src/Haskoin/Store/Stats.hs b/src/Haskoin/Store/Stats.hs
--- a/src/Haskoin/Store/Stats.hs
+++ b/src/Haskoin/Store/Stats.hs
@@ -98,47 +98,47 @@
     let metrics =
             HashMap.fromList
                 [
-                    ( t <> "_request_count"
+                    ( t <> ".request_count"
                     , Counter . statQueries
                     )
                 ,
-                    ( t <> "_item_count"
+                    ( t <> ".item_count"
                     , Counter . statItems
                     )
                 ,
-                    ( t <> "_errors_client"
+                    ( t <> ".client_errors"
                     , Counter . statClientErrors
                     )
                 ,
-                    ( t <> "_errors_server"
+                    ( t <> ".server_errors"
                     , Counter . statServerErrors
                     )
                 ,
-                    ( t <> "_mean_ms"
+                    ( t <> ".mean_ms"
                     , Gauge . mean . statTimes
                     )
                 ,
-                    ( t <> "_avg_ms"
+                    ( t <> ".avg_ms"
                     , Gauge . avg . statTimes
                     )
                 ,
-                    ( t <> "_max_ms"
+                    ( t <> ".max_ms"
                     , Gauge . maxi . statTimes
                     )
                 ,
-                    ( t <> "_min_ms"
+                    ( t <> ".min_ms"
                     , Gauge . mini . statTimes
                     )
                 ,
-                    ( t <> "_p90max_ms"
+                    ( t <> ".p90max_ms"
                     , Gauge . p90max . statTimes
                     )
                 ,
-                    ( t <> "_p90avg_ms"
+                    ( t <> ".p90avg_ms"
                     , Gauge . p90avg . statTimes
                     )
                 ,
-                    ( t <> "_var_ms"
+                    ( t <> ".var_ms"
                     , Gauge . var . statTimes
                     )
                 ]
diff --git a/src/Haskoin/Store/Web.hs b/src/Haskoin/Store/Web.hs
--- a/src/Haskoin/Store/Web.hs
+++ b/src/Haskoin/Store/Web.hs
@@ -414,8 +414,8 @@
     statKey <- V.newKey
     return WebMetrics{..}
   where
-    d x = createStatDist ("web_" <> x) s
-    g x = Metrics.createGauge ("web_" <> x) s
+    d x = createStatDist ("web." <> x) s
+    g x = Metrics.createGauge ("web." <> x) s
 
 withGaugeIO :: MonadUnliftIO m => Metrics.Gauge -> m a -> m a
 withGaugeIO g =
