anchor.diff:  }
   
   /*
  - * RenderNodes correspond to a desired state of a sky.Node. They are fully
  + * SkyNodeWrappers correspond to a desired state of a sky.Node. They are fully
    * immutable, with one exception: A UINode which is a Component which lives within
  - * an WrapperNode's children list, may be replaced with the "old" instance if it
  + * an SkyElementWrapper's children list, may be replaced with the "old" instance if it
    * has become stateful.
    */
  -abstract class RenderNode extends UINode {
  -
  -  static final Map<sky.Node, RenderNode> _nodeMap =
  -      new HashMap<sky.Node, RenderNode>();
  -
  -  static RenderNode _getMounted(sky.Node node) => _nodeMap[node];
  -
  -  RenderNode({ Object key }) : super(key: key);
  -
  -  RenderNode get _emptyNode;
  +abstract class SkyNodeWrapper extends UINode {
  +
  +  static final Map<sky.Node, SkyNodeWrapper> _nodeMap =
  +      new HashMap<sky.Node, SkyNodeWrapper>();
  +
  +  static SkyNodeWrapper _getMounted(sky.Node node) => _nodeMap[node];
  +
  +  SkyNodeWrapper({ Object key }) : super(key: key);
  +
  +  SkyNodeWrapper get _emptyNode;
   
     sky.Node _createNode();
   
  
positive.code:   );
  }
  
  class Image extends WrapperNode {
  
    String get _tagName => 'img';
  
    static final Image _emptyImage = new Image();
  
    RenderNode get _emptyNode => _emptyImage;
  
    final String src;
    final int width;
  
negative.code:     _syncNode(old);
    }
  
    void _syncNode(SkyNodeWrapper old);
  
    void _remove() {
      assert(_root != null);
  