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.9.4
+### Change
+- Don't spam best block events.
+
 ## 0.9.3
 ### Change
 - Correct display of milliseconds in log.
diff --git a/haskoin-node.cabal b/haskoin-node.cabal
--- a/haskoin-node.cabal
+++ b/haskoin-node.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 87835bb33cb3181042456c86fd4dd7aecf2dbef52909e2afbeec9a22289693a0
+-- hash: 15e06b1e42eec51a6c352bcfede82426a0c116a31250e4f4c359a571045bfb43
 
 name:           haskoin-node
-version:        0.9.3
+version:        0.9.4
 synopsis:       Haskoin Node P2P library for Bitcoin and Bitcoin Cash
 description:    Bitcoin and Bitcoin Cash peer-to-peer protocol library featuring headers-first synchronisation.
 category:       Bitcoin, Finance, Network
diff --git a/src/Network/Haskoin/Node/Chain.hs b/src/Network/Haskoin/Node/Chain.hs
--- a/src/Network/Haskoin/Node/Chain.hs
+++ b/src/Network/Haskoin/Node/Chain.hs
@@ -86,6 +86,7 @@
         $(logDebugS) "Chain" $
             "Importing " <> cs (show (length hs)) <> " headers"
         now <- round <$> liftIO getPOSIXTime
+        pbest <- getBestBlockHeader
         importHeaders net now hs >>= \case
             Left e -> do
                 $(logErrorS) "Chain" "Could not connect received headers"
@@ -93,7 +94,8 @@
             Right done -> do
                 setLastReceived now
                 best <- getBestBlockHeader
-                chainEvent $ ChainBestBlock best
+                when (nodeHeader pbest /= nodeHeader best) . chainEvent $
+                    ChainBestBlock best
                 if done
                     then do
                         $(logDebugS)
