anchor.diff:                updated = true;
                 break;
               }
  -            parent.removeChild(aNode, context);
  +            parent.removeChild(aNode, attached);
             }
   
             if (!updated) {
  -            parent.insertChild(bNode, null, context);
  +            parent.insertChild(bNode, null, context, attached);
             } else {
               while (i < a.length) {
  -              parent.removeChild(a[i++], context);
  +              parent.removeChild(a[i++], attached);
               }
             }
           } else {
  
positive.code:     final nextPos = bEnd + 1;
      final next = nextPos < b.length ? b[nextPos] : null;
      while (bStart <= bEnd) {
        parent.insertChild(b[bStart++], next, context);
      }
    } else if (bStart > bEnd) {
      // All nodes from [b] are updated, remove the rest from [a].
      while (aStart <= aEnd) {
        parent.removeChild(a[aStart++], context);
      }
    } else {
      // Perform more complex update algorithm on the remaining nodes.
  
negative.code: }
  
  void updateChildren(VNode parent, List<VNode> a, List<VNode> b, VContext context) {
    final bool attached = context.isAttached;
    if (a != null && a.isNotEmpty) {
      if (b == null || b.isEmpty) {
        // when [b] is empty, it means that all childrens from list [a] were
        // removed
        for (var i = 0; i < a.length; i++) {
          parent.removeChild(a[i], attached);
        }
      } else {
        if (a.length == 1 && b.length == 1) {
  