diff --git a/trie/sync.go b/trie/sync.go
index 3de7585361bf52179b36101f48e20ed7e1a8351d..400dff9039c4d4cfc18cb7a31961e008a46485d5 100644
--- a/trie/sync.go
+++ b/trie/sync.go
@@ -213,11 +213,13 @@ func (s *TrieSync) children(req *request) ([]*request, error) {
 
 	switch node := (*req.object).(type) {
 	case *shortNode:
+		node = node.copy() // Prevents linking all downloaded nodes together.
 		children = []child{{
 			node:  &node.Val,
 			depth: req.depth + len(node.Key),
 		}}
 	case *fullNode:
+		node = node.copy()
 		for i := 0; i < 17; i++ {
 			if node.Children[i] != nil {
 				children = append(children, child{