diff --git a/ethdb/mutation.go b/ethdb/mutation.go
index 14f947ad72f32c47db92dbc228b0675f8ca61506..d793004ea50522dd96db35fbf44a61d1d587bc14 100644
--- a/ethdb/mutation.go
+++ b/ethdb/mutation.go
@@ -160,7 +160,7 @@ func (m *mutation) Commit() (uint64, error) {
 	}
 	m.mu.Lock()
 	defer m.mu.Unlock()
-	tuples := make(MultiPutTuples, 0, m.puts.Size()*3)
+	tuples := make(MultiPutTuples, 0, m.puts.Len()*3)
 	for bucketStr, bt := range m.puts.mp {
 		bucketB := []byte(bucketStr)
 		for key := range bt {
@@ -188,7 +188,7 @@ func (m *mutation) Rollback() {
 func (m *mutation) Keys() ([][]byte, error) {
 	m.mu.RLock()
 	defer m.mu.RUnlock()
-	tuples := common.NewTuples(m.puts.Size(), 2, 1)
+	tuples := common.NewTuples(m.puts.Len(), 2, 1)
 	for bucketStr, bt := range m.puts.mp {
 		bucketB := []byte(bucketStr)
 		for key := range bt {
diff --git a/ethdb/mutation_puts.go b/ethdb/mutation_puts.go
index 5413b10133f58eadbab8b8749a4e5ebf5ead56f3..894e746093c76187589ce70561ee5b4d04335a6b 100644
--- a/ethdb/mutation_puts.go
+++ b/ethdb/mutation_puts.go
@@ -3,12 +3,12 @@ package ethdb
 type puts struct {
 	mp   map[string]putsBucket //map[bucket]putsBucket
 	size int
+	len  int
 }
 
 func newPuts() *puts {
 	return &puts{
-		mp:   make(map[string]putsBucket),
-		size: 0,
+		mp: make(map[string]putsBucket),
 	}
 }
 
@@ -19,14 +19,16 @@ func (p *puts) set(bucket, key, value []byte) {
 		bucketPuts = make(putsBucket)
 		p.mp[string(bucket)] = bucketPuts
 	}
+	oldLen := len(bucketPuts)
 	skey := string(key)
 	if oldVal, ok := bucketPuts[skey]; ok {
 		p.size -= len(oldVal)
 	} else {
 		p.size += len(skey) + 32 // Add fixed overhead per key
 	}
-	bucketPuts[string(key)] = value
+	bucketPuts[skey] = value
 	p.size += len(value)
+	p.len += len(bucketPuts) - oldLen
 }
 
 func (p *puts) get(bucket, key []byte) ([]byte, bool) {
@@ -42,6 +44,10 @@ func (p *puts) Delete(bucket, key []byte) {
 	p.set(bucket, key, nil)
 }
 
+func (p *puts) Len() int {
+	return p.len
+}
+
 func (p *puts) Size() int {
 	return p.size
 }
diff --git a/ethdb/mutation_puts_test.go b/ethdb/mutation_puts_test.go
deleted file mode 100644
index de225aadee7e8946f63b0582a830cba5a9f349af..0000000000000000000000000000000000000000
--- a/ethdb/mutation_puts_test.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package ethdb
-
-//
-//func TestIndexMapper(t *testing.T) {
-//	im:=indexMapper{
-//		cache:    make(map[string]*dbutils.HistoryIndexBytes),
-//		chunkIDs: make(map[string][]uint64),
-//	}
-//
-//	key:=[]byte("some key")
-//	if err:=im.Put(key,dbutils.NewHistoryIndex().Append(1)); err!=nil {
-//		t.Fatal(1, err)
-//	}
-//	index,err:=im.LastChunk(key)
-//	if err!=nil {
-//		t.Fatal(err)
-//	}
-//	if v,ok:= index.FirstElement(); !ok || v!=1 {
-//		t.Fatal(v, ok,im)
-//	}
-//
-//	if err:=im.Put(key,dbutils.NewHistoryIndex().Append(2)); err!=nil {
-//		t.Fatal(2, err)
-//	}
-//
-//	index,err=im.LastChunk(key)
-//	if err!=nil {
-//		t.Fatal(err)
-//	}
-//
-//	if v,ok:= index.FirstElement(); !ok || v!=2 {
-//		t.Fatal(v, ok, im)
-//	}
-//}