anchor.diff:        parent._root.markNeedsLayout();
       }
       _root.updateInlineStyle(inlineStyle);
  -
  -    _syncChildren(oldOneChildListRenderNodeWrapper);
  -  }
  -
  -  void _syncChildren(OneChildListRenderNodeWrapper oldOneChildListRenderNodeWrapper) {
  +  }
  +
  +  void _removeChild(UINode node) {
  +    assert(_root is RenderCSSContainer);
  +    _root.remove(node._root);
  +    super._removeChild(node);
  +  }
  +
  +  void _remove() {
  +    assert(_root != null);
  +    _nodeMap.remove(_root);
  +    super._remove();
  +  }
  +}
  +
  +final List<UINode> _emptyList = new List<UINode>();
  +
  +abstract class OneChildListRenderNodeWrapper extends RenderNodeWrapper {
  +
  +  final List<UINode> children;
  +
  +  OneChildListRenderNodeWrapper({
  +    Object key,
  +    List<UINode> children,
  +    Style style,
  +    String inlineStyle
  +  }) : this.children = children == null ? _emptyList : children,
  +  super(
  +    key: key,
  +    style: style,
  +    inlineStyle: inlineStyle
  +  ) {
  +    assert(!_debugHasDuplicateIds());
  +  }
  +
  +  void _remove() {
  +    assert(children != null);
  +    for (var child in children) {
  +      assert(child != null);
  +      _removeChild(child);
  +    }
  +    super._remove();
  +  }
  +
  +  bool _debugHasDuplicateIds() {
  +    var idSet = new HashSet<String>();
  +    for (var child in children) {
  +      assert(child != null);
  +      if (child.interchangeable)
  +        continue; // when these nodes are reordered, we just reassign the data
  +
  +      if (!idSet.add(child._key)) {
  +        throw '''If multiple non-interchangeable nodes of the same type exist as children
  +                of another node, they must have unique keys.
  +                Duplicate: "${child._key}"''';
  +      }
  +    }
  +    return false;
  +  }
  +
  +  void _syncRenderNode(OneChildListRenderNodeWrapper old) {
  +    super._syncRenderNode(old);
  +
       if (_root is! RenderCSSContainer)
         return;
   
       var startIndex = 0;
       var endIndex = children.length;
   
  -    var oldChildren = oldOneChildListRenderNodeWrapper.children;
  +    var oldChildren = old.children;
       var oldStartIndex = 0;
       var oldEndIndex = oldChildren.length;
   
  
positive.code:       oldNodeIdMap[currentNode._key] = null; // mark it reordered
        assert(_root is RenderCSSContainer);
        assert(oldNode._root is RenderCSSContainer);
        oldOneChildListRenderNodeWrapper._root.remove(oldNode._root);
        _root.add(oldNode._root, before: nextSibling);
        return true;
      }
  
negative.code: 
    static RenderNodeWrapper _getMounted(RenderCSS node) => _nodeMap[node];
  
    RenderNodeWrapper({
      Object key,
      this.style,
      this.inlineStyle
    }) : super(key: key);
  
    final Style style;
    final String inlineStyle;
  
    RenderCSS _createNode();
    RenderNodeWrapper get _emptyNode;
  
    void _sync(UINode old, RenderCSSContainer host, RenderCSS insertBefore) {
      if (old == null) {
  