anchor.diff:     * Creates the [placeholderElement].
      */
     void _createPlaceholderElement() {
  -    _logger.finest('creating new placeholder');
  -    placeholderElement = new Element.tag(draggable.tagName);
  -    _placeholderDropzoneGroup.install(placeholderElement);
  -    
  -    if (newGroup.placeholderClass != null) {
  +    _logger.finest('creating new placeholder element');
  +    placeholderElement = new Element.tag(_draggable.tagName);
  +    
  +    // Create a new DropzoneGroup just for the placeholder element.
  +    _placeholderDropzoneGroup = new DropzoneGroup()
  +    ..install(placeholderElement)
  +    ..onDrop.listen((DropzoneEvent event) {
  +      _logger.finest('drop on placeholder');
  +      hidePlaceholder(dropped: true);
  +    });
  +  }
  +  
  +  /**
  +   * Applies the [group]'s placeholder styling properties to the 
  +   * [placeholderElement].
  +   */
  +  void _applyGroupProperties(SortableGroup group) {
  +    if (_currentGroup.placeholderClass != null) {
         // The placeholder receives the placeholderClass CSS from its current group.
  -      placeholderElement.classes.add(newGroup.placeholderClass);
  -    }
  -    
  -    if (newGroup.forcePlaceholderSize) {
  +      placeholderElement.classes.add(_currentGroup.placeholderClass);
  +    } else {
  +      placeholderElement.classes.clear();
  +    }
  +    
  +    if (_currentGroup.forcePlaceholderSize) {
         // Placeholder receives the computed size from the dragged element.
  -      placeholderElement.style.height = draggable.getComputedStyle().height; 
  -      placeholderElement.style.width = draggable.getComputedStyle().width;
  -    }
  -    
  -    // Listen for drops inside placeholder.
  -    _placeholderDropSub = _placeholderDropzoneGroup.onDrop.listen((_) {
  -      _logger.finest('placeholder drop');
  -      _dropped = true;
  -    });
  -    
  -    // Hide placeholder on dragEnd of draggable.
  -    _draggableEndSub = originalGroup.onDragEnd.listen((_) {
  -      _logger.finest('placeholder dragEnd');
  -      if (_dropped) {
  -        _logger.finest('placeholder was dropped -> Show draggable at new position');
  -        // Hide placeholder and show draggable again at new position.
  -        _currentPlaceholder.hidePlaceholder();
  -      } else {
  -        // Not dropped. This means the drag ended outside of a placeholder or
  -        // the drag was cancelled somehow (ESC-key, ...)
  -        // Revert to state before dragging.
  -        _logger.finest('placeholder not dropped -> Revert to state before dragging');
  -        _currentPlaceholder.hidePlaceholder(revertToOriginal: true);
  -      }
  -      
  -      // Reset current placeholder.
  -      _currentPlaceholder = null;
  -      
  -      // Cancel all subscriptions.
  -      if (_dropzoneOverSub != null) {
  -        _dropzoneOverSub.cancel();
  -      }
  -      if (_dropzoneDropSub != null) {
  -        _dropzoneDropSub.cancel();
  -      }
  -      _placeholderDropSub.cancel();
  -      _draggableEndSub.cancel();
  -      
  -      _placeholderDropzoneGroup.uninstall(placeholderElement);
  -    });
  +      placeholderElement.style.width = _draggableWidth;
  +      placeholderElement.style.height = _draggableHeight;
  +    } else {
  +      placeholderElement.style.removeProperty('width');
  +      placeholderElement.style.removeProperty('height');
  +    }
     }
     
     /**
  
positive.code:   // -------------------
    final DropzoneGroup _dropzoneGroup;
    
    /// Subscription on dropzone dragEnter (one for the entire sortable group).
    StreamSubscription _dragEnterSub;
    /// Subscription on dropzone dragStart (one for the entire sortable group).
    StreamSubscription _dragStartSub;
    
    /**
     * Constructor.
  
negative.code:  */
  class _Placeholder {
    /// The draggable that this placeholder is for.
    final Element _draggable;
    
    final String _draggableWidth;
    final String _draggableHeight;
    
    /// Position of the draggable element before dragging.
    final Position _originalPosition;
    
    /// The group of the draggable element before dragging. 
    /// Might be a [DraggableGroup] or a [SortableGroup].
    final DraggableGroup _originalGroup;
    
    /// Current Position of the placeholder.
    Position _currentPosition;
    
    /// Current group of the placeholder.
    SortableGroup _currentGroup;
    
    /// The placeholder element.
    Element placeholderElement;
      
    /// DragOver subscription used when dropzone is bigger than placeholder.
    StreamSubscription _dropzoneOverSub;
    
    /// A [DropzoneGroup] just for the placeholder to receive events from draggable.
    DropzoneGroup _placeholderDropzoneGroup;
    
    /**
     * Creates a new placeholder for the specified [draggable].
     */
    _Placeholder(Element draggable, DraggableGroup originalGroup) :
      _draggable = draggable,
      // Save draggable width and height because they are not available when 
      // draggable is removed from the DOM.
      _draggableWidth = draggable.getComputedStyle().width,
      _draggableHeight = draggable.getComputedStyle().height,
      _originalGroup = originalGroup,
      _originalPosition = new Position(draggable.parent,
          html5.getElementIndexInParent(draggable)){
      
      _createPlaceholderElement();
    }
    
    /**
     * Shows the placeholder at the position of [dropzone].
  