anchor.diff:      }
     }
   
  +  void insertBefore(Node node, html.Node nextRef, Context context) {
  +    injectBefore(node, ref, nextRef, context);
  +  }
  +
  +  void move(Node node, html.Node nextRef, Context context) {
  +    ref.insertBefore(node.ref, nextRef);
  +  }
  +
  +  void removeChild(Node node, Context context) {
  +    node.dispose(context);
  +  }
  +
     String toString() => '<$tag key="$key">${children.join()}</$tag>';
   }
   
  -void updateChildren(List<Node> a, List<Node> b, html.Element parent, Context context) {
  +void updateChildren(List<Node> a, List<Node> b, Container parent, Context context) {
     if (a.isNotEmpty) {
       if (b.isEmpty) {
         // when [b] is empty, it means that all childrens from list [a] were
         // removed
         for (var i = 0; i < a.length; i++) {
  -        a[i].dispose(context);
  +        parent.removeChild(a[i], context);
         }
       } else {
         if (a.length == 1 && b.length == 1) {
  
positive.code: 
              aNode.update(bNode, context);
            } else {
              aNode.dispose(context);
              removeOffset++;
            }
          }
  
negative.code:   if (start == bLength) {
      if (start != aLength) {
        for (var i = start; i < a.length; i++) {
          parent.removeChild(a[i], context);
        }
      }
    } else if (start == aLength) {
      for (var i = start; i < b.length; i++) {
        parent.insertBefore(b[i], null, context);
      }
    } else {
      var aEnd = a.length - 1;
  