diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,11 @@
 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.17.0
+### Added
+- Support for Bitcoin Cash November 2020 hard fork.
+- BlockHeaders instance for ReaderT Chain.
+
 ## 0.16.0
 ### Changed
 - Add support for column families.
diff --git a/haskoin-node.cabal b/haskoin-node.cabal
--- a/haskoin-node.cabal
+++ b/haskoin-node.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.33.0.
+-- This file has been generated from package.yaml by hpack version 0.34.2.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: b80c691ed899f492d1f0f3165f9f4a78f85253ba1a6bd61a3b4705075572ccae
+-- hash: bfbf80f5bef5255eb74c1b030e32037fa23ac5c7e70f0fd73930bd675232580a
 
 name:           haskoin-node
-version:        0.16.0
+version:        0.17.0
 synopsis:       P2P library for Bitcoin and Bitcoin Cash
 description:    Please see the README on GitHub at <https://github.com/haskoin/haskoin-node#readme>
 category:       Bitcoin, Finance, Network
@@ -45,7 +45,7 @@
     , containers
     , data-default
     , hashable
-    , haskoin-core >=0.15.0
+    , haskoin-core >=0.17.0
     , monad-logger
     , mtl
     , network
@@ -81,7 +81,7 @@
     , containers
     , data-default
     , hashable
-    , haskoin-core >=0.15.0
+    , haskoin-core >=0.17.0
     , haskoin-node
     , hspec
     , monad-logger
diff --git a/src/Haskoin/Node/Chain.hs b/src/Haskoin/Node/Chain.hs
--- a/src/Haskoin/Node/Chain.hs
+++ b/src/Haskoin/Node/Chain.hs
@@ -29,7 +29,7 @@
 import           Control.Monad.Except      (runExceptT, throwError)
 import           Control.Monad.Logger      (MonadLoggerIO, logDebugS, logErrorS,
                                             logInfoS)
-import           Control.Monad.Reader      (MonadReader, ReaderT, asks,
+import           Control.Monad.Reader      (MonadReader, ReaderT (..), asks,
                                             runReaderT)
 import           Control.Monad.Trans       (lift)
 import           Control.Monad.Trans.Maybe (MaybeT (..), runMaybeT)
@@ -169,8 +169,7 @@
         return BestBlockKey
     put BestBlockKey = putWord8 0x91
 
-instance (Monad m, MonadIO m, MonadReader ChainConfig m) =>
-         BlockHeaders m where
+instance MonadIO m => BlockHeaders (ReaderT ChainConfig m) where
     addBlockHeader bn = do
         db <- asks chainConfDB
         asks chainConfColumnFamily >>= \case
@@ -202,12 +201,18 @@
         f Nothing bn   = insertOp (BlockHeaderKey (h bn)) bn
         f (Just cf) bn = insertOpCF cf (BlockHeaderKey (h bn)) bn
 
+instance MonadIO m => BlockHeaders (ReaderT Chain m) where
+    getBlockHeader bh = ReaderT $ chainGetBlock bh
+    getBestBlockHeader = ReaderT chainGetBest
+    addBlockHeader _ = undefined
+    setBestBlockHeader _ = undefined
+    addBlockHeaders _ = undefined
+
 withBlockHeaders :: MonadChain m => ReaderT ChainConfig m a -> m a
 withBlockHeaders f = do
     cfg <- asks myConfig
     runReaderT f cfg
 
--- | Launch process to synchronize block headers in current thread.
 withChain ::
        (MonadUnliftIO m, MonadLoggerIO m)
     => ChainConfig
