anchor.diff:              }
             }
           } else {
  -          // [a] child position
  -          // if it is -1, then the child is inserted
  -          var unchangedPosition = -1;
  -
  -          for (var i = 0; i < a.length; i++) {
  -            final aNode = a[i];
  +          int i = 0;
  +          bool updated = false;
  +          while (i < a.length) {
  +            final VNode aNode = a[i++];
               if (aNode.key == bNode.key) {
  -              unchangedPosition = i;
  +              aNode.update(bNode, context);
  +              updated = true;
                 break;
  -            } else {
  -              parent.removeChild(aNode, attached);
  -            }
  -          }
  -
  -          if (unchangedPosition != -1) {
  -            for (var i = unchangedPosition + 1; i < a.length; i++) {
  -              parent.removeChild(a[i], attached);
  -            }
  -            a[unchangedPosition].update(bNode, context);
  +            }
  +            parent.removeChild(aNode, attached);
  +          }
  +
  +          if (!updated) {
  +            parent.insertChild(bNode, null, context, attached);
             } else {
  -            parent.insertChild(bNode, null, context, attached);
  +            while (i < a.length) {
  +              parent.removeChild(a[i++], attached);
  +            }
             }
           }
         } else {
           // both [a] and [b] have more then 1 child, so we should handle
           // more complex situations with inserting/removing and repositioning
  -        // childrens.
  +        // children.
           if (a.first.key == null) {
             return _updateImplicitChildren(parent, a, b, context, attached);
           }
  
positive.code: 
          // implicit keys
          if (aNode.key == null) {
            var i = 0;
            var updated = false;
            while (i < b.length) {
              final bNode = b[i++];
              if (aNode.sameType(bNode)) {
                aNode.update(bNode, context);
                updated = true;
  
negative.code: 
          // implicit keys
          if (bNode.key == null) {
            int i = 0;
            bool updated = false;
            while (i < a.length) {
              final VNode aNode = a[i++];
              if (aNode.sameType(bNode)) {
                aNode.update(bNode, context);
                updated = true;
  