diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go
index d13818b3700d5cc669917120a97ef722aeff5fe5..fe68ea9140fa02d071cdfcca18438184b5d0585f 100644
--- a/eth/downloader/downloader_test.go
+++ b/eth/downloader/downloader_test.go
@@ -23,12 +23,19 @@ func createHashes(start, amount int) (hashes []common.Hash) {
 	return
 }
 
+func createBlock(i int, prevHash, hash common.Hash) *types.Block {
+	header := &types.Header{Number: big.NewInt(int64(i))}
+	block := types.NewBlockWithHeader(header)
+	block.HeaderHash = hash
+	block.ParentHeaderHash = knownHash
+	return block
+}
+
 func createBlocksFromHashes(hashes []common.Hash) map[common.Hash]*types.Block {
 	blocks := make(map[common.Hash]*types.Block)
+
 	for i, hash := range hashes {
-		header := &types.Header{Number: big.NewInt(int64(len(hashes) - i))}
-		blocks[hash] = types.NewBlockWithHeader(header)
-		blocks[hash].HeaderHash = hash
+		blocks[hash] = createBlock(len(hashes)-i, knownHash, hash)
 	}
 
 	return blocks
@@ -162,7 +169,7 @@ func TestTaking(t *testing.T) {
 		t.Error("download error", err)
 	}
 
-	bs1 := tester.downloader.TakeBlocks(1000)
+	bs1 := tester.downloader.TakeBlocks()
 	if len(bs1) != 1000 {
 		t.Error("expected to take 1000, got", len(bs1))
 	}
diff --git a/eth/downloader/queue_test.go b/eth/downloader/queue_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..b163bd9c77457e169fee0fea0941f6c0de5d63cb
--- /dev/null
+++ b/eth/downloader/queue_test.go
@@ -0,0 +1,62 @@
+package downloader
+
+import (
+	"testing"
+
+	"github.com/ethereum/go-ethereum/common"
+	"github.com/ethereum/go-ethereum/core/types"
+	"gopkg.in/fatih/set.v0"
+)
+
+func createHashSet(hashes []common.Hash) *set.Set {
+	hset := set.New()
+
+	for _, hash := range hashes {
+		hset.Add(hash)
+	}
+
+	return hset
+}
+
+func createBlocksFromHashSet(hashes *set.Set) []*types.Block {
+	blocks := make([]*types.Block, hashes.Size())
+
+	var i int
+	hashes.Each(func(v interface{}) bool {
+		blocks[i] = createBlock(i, common.Hash{}, v.(common.Hash))
+		i++
+		return true
+	})
+
+	return blocks
+}
+
+func TestChunking(t *testing.T) {
+	queue := newqueue()
+	peer1 := newPeer("peer1", common.Hash{}, nil, nil)
+	peer2 := newPeer("peer2", common.Hash{}, nil, nil)
+
+	// 99 + 1 (1 == known genesis hash)
+	hashes := createHashes(0, 99)
+	hashSet := createHashSet(hashes)
+	queue.put(hashSet)
+
+	chunk1 := queue.get(peer1, 99)
+	if chunk1 == nil {
+		t.Errorf("chunk1 is nil")
+		t.FailNow()
+	}
+	chunk2 := queue.get(peer2, 99)
+	if chunk2 == nil {
+		t.Errorf("chunk2 is nil")
+		t.FailNow()
+	}
+
+	if chunk1.hashes.Size() != 99 {
+		t.Error("expected chunk1 hashes to be 99, got", chunk1.hashes.Size())
+	}
+
+	if chunk2.hashes.Size() != 1 {
+		t.Error("expected chunk1 hashes to be 1, got", chunk2.hashes.Size())
+	}
+}