diff --git a/core/commands/bitswap.go b/core/commands/bitswap.go
index f89f38d7f3d6cb593c85e8516707836dc96d98e0..cfc522bae8aef878696fa015282b04a4ba1b9633 100644
--- a/core/commands/bitswap.go
+++ b/core/commands/bitswap.go
@@ -101,6 +101,8 @@ var bitswapStatCmd = &cmds.Command{
 			buf := new(bytes.Buffer)
 			fmt.Fprintln(buf, "bitswap status")
 			fmt.Fprintf(buf, "\tprovides buffer: %d / %d\n", out.ProvideBufLen, bitswap.HasBlockBufferSize)
+			fmt.Fprintf(buf, "\tblocks received: %d\n", out.BlocksReceived)
+			fmt.Fprintf(buf, "\tdup blocks received: %d\n", out.DupBlksReceived)
 			fmt.Fprintf(buf, "\twantlist [%d keys]\n", len(out.Wantlist))
 			for _, k := range out.Wantlist {
 				fmt.Fprintf(buf, "\t\t%s\n", k.B58String())
diff --git a/exchange/bitswap/bitswap.go b/exchange/bitswap/bitswap.go
index 937ee131e5fc56f834377028f5d9aff7ee0c6819..8b12a4727788a1ecd72610f06b6c17db39feaae2 100644
--- a/exchange/bitswap/bitswap.go
+++ b/exchange/bitswap/bitswap.go
@@ -127,6 +127,9 @@ type Bitswap struct {
 	newBlocks chan *blocks.Block
 
 	provideKeys chan u.Key
+
+	blocksRecvd    int
+	dupBlocksRecvd int
 }
 
 type blockRequest struct {
@@ -219,14 +222,6 @@ func (bs *Bitswap) HasBlock(ctx context.Context, blk *blocks.Block) error {
 		return errors.New("bitswap is closed")
 	default:
 	}
-	has, err := bs.blockstore.Has(blk.Key())
-	if err != nil {
-		return err
-	}
-
-	if has {
-		log.Error(bs.self, "Dup Block! ", blk.Key())
-	}
 
 	if err := bs.blockstore.Put(blk); err != nil {
 		return err
@@ -351,6 +346,10 @@ func (bs *Bitswap) ReceiveMessage(ctx context.Context, p peer.ID, incoming bsmsg
 	// Should only track *useful* messages in ledger
 
 	for _, block := range incoming.Blocks() {
+		bs.blocksRecvd++
+		if has, err := bs.blockstore.Has(block.Key()); err == nil && has {
+			bs.dupBlocksRecvd++
+		}
 		hasBlockCtx, cancel := context.WithTimeout(ctx, hasBlockTimeout)
 		if err := bs.HasBlock(hasBlockCtx, block); err != nil {
 			log.Debug(err)
diff --git a/exchange/bitswap/stat.go b/exchange/bitswap/stat.go
index 1c5fec62b98569be1dfed44aeaac1cca85bf4652..ceab4b2ee2aef994b51bd4c6ccdeca734f8da6c8 100644
--- a/exchange/bitswap/stat.go
+++ b/exchange/bitswap/stat.go
@@ -6,15 +6,19 @@ import (
 )
 
 type Stat struct {
-	ProvideBufLen int
-	Wantlist      []u.Key
-	Peers         []string
+	ProvideBufLen   int
+	Wantlist        []u.Key
+	Peers           []string
+	BlocksReceived  int
+	DupBlksReceived int
 }
 
 func (bs *Bitswap) Stat() (*Stat, error) {
 	st := new(Stat)
 	st.ProvideBufLen = len(bs.newBlocks)
 	st.Wantlist = bs.GetWantlist()
+	st.BlocksReceived = bs.blocksRecvd
+	st.DupBlksReceived = bs.dupBlocksRecvd
 
 	for _, p := range bs.engine.Peers() {
 		st.Peers = append(st.Peers, p.Pretty())