diff --git a/packages/database/database.go b/packages/database/database.go
index 5ac305d61bd4dcb798282ebdea49fb5edb443010..948bf19fd8bd537a7dcc120195907bc0b97b5c13 100644
--- a/packages/database/database.go
+++ b/packages/database/database.go
@@ -120,23 +120,26 @@ func (this *databaseImpl) Delete(key []byte) error {
 	return err
 }
 
-func (this *databaseImpl) ForEach(consumer func(key []byte, value []byte)) error {
+func (this *databaseImpl) ForEach(consumer func([]byte, []byte)) error {
 	err := this.db.View(func(txn *badger.Txn) error {
 		// create an iterator the default options
 		it := txn.NewIterator(badger.DefaultIteratorOptions)
 		defer it.Close()
 
+		// avoid allocations by reusing the value buffer
+		var value []byte
+
 		// loop through every key-value-pair and call the function
 		for it.Rewind(); it.Valid(); it.Next() {
 			item := it.Item()
 
-			key := item.Key()
-			value, err := item.ValueCopy(nil)
+			var err error
+			value, err = item.ValueCopy(value)
 			if err != nil {
 				return err
 			}
 
-			consumer(key, value)
+			consumer(item.Key(), value)
 		}
 		return nil
 	})