diff --git a/blocks/blocksutil/block_generator.go b/blocks/blocksutil/block_generator.go
index d70f794702ad47f34243195d1d4295c8baa7191d..438eac1a5da2ce7e8dfd80cc0c6c828f8ba441fa 100644
--- a/blocks/blocksutil/block_generator.go
+++ b/blocks/blocksutil/block_generator.go
@@ -10,13 +10,13 @@ type BlockGenerator struct {
 	seq int
 }
 
-func (bg *BlockGenerator) Next() blocks.Block {
+func (bg *BlockGenerator) Next() *blocks.BasicBlock {
 	bg.seq++
 	return blocks.NewBlock([]byte(string(bg.seq)))
 }
 
-func (bg *BlockGenerator) Blocks(n int) []blocks.Block {
-	blocks := make([]blocks.Block, 0)
+func (bg *BlockGenerator) Blocks(n int) []*blocks.BasicBlock {
+	blocks := make([]*blocks.BasicBlock, 0)
 	for i := 0; i < n; i++ {
 		b := bg.Next()
 		blocks = append(blocks, b)
diff --git a/blockservice/blockservice.go b/blockservice/blockservice.go
index 8ecec71f94ff88398b6d59fcccf9b2ff0f0b8082..d4461b66d81531491d91eea26466e40d568e2fca 100644
--- a/blockservice/blockservice.go
+++ b/blockservice/blockservice.go
@@ -4,6 +4,7 @@
 package blockservice
 
 import (
+	"context"
 	"errors"
 	"fmt"
 
@@ -11,7 +12,6 @@ import (
 	"github.com/ipfs/go-ipfs/blocks/blockstore"
 	exchange "github.com/ipfs/go-ipfs/exchange"
 
-	context "context"
 	logging "gx/ipfs/QmSpJByNKFX1sCsHBEp3R73FL4NF6FnQTEGyNAXHm2GS52/go-log"
 	cid "gx/ipfs/QmakyCk6Vnn16WEKjbkxieZmM2YLTzkFWizbmGowoYPjro/go-cid"
 )
diff --git a/blockservice/blockservice_test.go b/blockservice/blockservice_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..82244c1cd84f99340f472b093afb67d92be55da6
--- /dev/null
+++ b/blockservice/blockservice_test.go
@@ -0,0 +1,44 @@
+package blockservice
+
+import (
+	"testing"
+
+	"github.com/ipfs/go-ipfs/blocks/blockstore"
+	butil "github.com/ipfs/go-ipfs/blocks/blocksutil"
+	offline "github.com/ipfs/go-ipfs/exchange/offline"
+
+	cid "gx/ipfs/QmakyCk6Vnn16WEKjbkxieZmM2YLTzkFWizbmGowoYPjro/go-cid"
+	ds "gx/ipfs/QmbzuUusHqaLLoNTDEVLcSF6vZDHZDLPC7p4bztRvvkXxU/go-datastore"
+	dssync "gx/ipfs/QmbzuUusHqaLLoNTDEVLcSF6vZDHZDLPC7p4bztRvvkXxU/go-datastore/sync"
+)
+
+func TestWriteThroughWorks(t *testing.T) {
+	dstore := dssync.MutexWrap(ds.NewMapDatastore())
+	bstore := HasFailingBlockstore{
+		blockstore.NewBlockstore(dstore),
+		t,
+		true,
+	}
+	exch := offline.Exchange(bstore)
+	bserv := NewWriteThrough(bstore, exch)
+	bgen := butil.NewBlockGenerator()
+
+	bserv.AddBlock(bgen.Next())
+}
+
+var _ blockstore.GCBlockstore = (*HasFailingBlockstore)(nil)
+
+type HasFailingBlockstore struct {
+	blockstore.GCBlockstore
+	t    *testing.T
+	Fail bool
+}
+
+func (bs HasFailingBlockstore) Has(k *cid.Cid) (bool, error) {
+	if bs.Fail {
+		bs.t.Fatal("Has shouldn't be called")
+		return false, nil
+	}
+	return bs.GCBlockstore.Has(k)
+
+}