anchor.diff:     * Sets expanded state of a node.
      */
     void setNodeExpanded(String nodeUID, bool expanded) {
  -    HashSet<String> previousSelection = new HashSet.from(selection);
  -    _rowsMap[nodeUID].expanded = expanded;
  -    reloadData();
  -    HashSet<String> currentSelection = new HashSet.from(selection);
  -
  -    // Testing previousSelection == currentSelection won't behaves as expected
  -    // then, we're testing if the set are the same using intersection.
  -    bool changed = false;
  -    if (previousSelection.length != currentSelection.length) {
  -      changed = true;
  -    }
  -    if (previousSelection.length != previousSelection.intersection(currentSelection).length) {
  -      changed = true;
  -    }
  -    if (changed) {
  -      _delegate.treeViewSelectedChanged(this,
  -          _rowIndexesToNodeUIDs(_listView.selection));
  -    }
  -
  -    _delegate.treeViewSaveExpandedState(this);
  +    if (isNodeExpanded(nodeUID) != expanded) {
  +      HashSet<String> previousSelection = new HashSet.from(selection);
  +      _rowsMap[nodeUID].expanded = expanded;
  +      reloadData();
  +      HashSet<String> currentSelection = new HashSet.from(selection);
  +
  +      // Testing previousSelection == currentSelection won't behaves as expected
  +      // then, we're testing if the set are the same using intersection.
  +      bool changed = false;
  +      if (previousSelection.length != currentSelection.length) {
  +        changed = true;
  +      }
  +      if (previousSelection.length != previousSelection.intersection(currentSelection).length) {
  +        changed = true;
  +      }
  +      if (changed) {
  +        _delegate.treeViewSelectedChanged(this,
  +            _rowIndexesToNodeUIDs(_listView.selection));
  +      }
  +
  +      _delegate.treeViewSaveExpandedState(this);
  +    }
     }
   
     void toggleNodeExpanded(String nodeUID, {bool animated: false}) {
  
positive.code:         _rows[rowIndex].nodeUID,
          event);
    }
    
    String listViewDropEffect(ListView view, MouseEvent event) {
      String nodeUID = null;
      if (_currentDragOverCell != null) {
  
negative.code:     return _delegate.treeViewDropEffect(this, event.dataTransfer, nodeUID);
    }
  
    List<String> _innerDragSelection(DataTransfer dataTransfer) {
      if (dataTransfer.types.contains('application/x-spark-treeview')) {
        // TODO(dvh): dataTransfer.getData returns empty string when
        // it's called in dragOver event handler. Then, we can't check if uuid
        // matches. We'll improve the behavior when it will be fixed.
        return selection;
      } else {
        return null;
      }
    }
  
    void listViewDrop(ListView view, int rowIndex, DataTransfer dataTransfer) {
  