anchor.diff:              return;
           }
   
  -        _selectedShape.isSelected = false;
  +        if (!_possibleShape.isSelectable) {
  +            _possibleShape = null;
  +            _possibleId = -1;
  +            return;
  +        }
   
  -        _selectedShape = _possibleShape;
  -        _selectedShape.isSelected = true;
  +        if (_possibleShape.isSelected) {
  +            if (_possibleShape is CloudShape) {
  +                CloudShape cs = _possibleShape;
  +                cs.selectedPoints.remove(_possibleId);
  +                if (cs.selectedPoints.length == 0) {
  +                    _possibleShape.isSelected = false;
  +                }
  +            } else {
  +                _possibleShape.isSelected = false;
  +            }
  +            _possibleShape = null;
  +            _possibleId = -1;
  +            return;
  +        }
  +
  +        _possibleShape.isSelected = true;
  +        if (_possibleShape is CloudShape) {
  +            CloudShape cs = _possibleShape;
  +            cs.selectedPoints.add(_possibleId);
  +        }
           _possibleShape = null;
       }
   }
  
positive.code: 
          _hub.modeController.register(this, ModeData.SELECTION);
  
           _hub.eventRegistry.MouseMove.subscribe(_handleMouseMove);
           _hub.eventRegistry.MouseDown.subscribe(_handleMouseDown);
           _hub.eventRegistry.MouseUp.subscribe(_handleMouseUp);
  
          _selectedShape = _possibleShape = null;
      }
  
      void startMode() {
      }
  
      void endMode() {
          if (_selectedShape != null) {
              _selectedShape.isSelected = false;
              _selectedShape = null;
          }
      }
  
      void _handleMouseMove(MouseData data) {
  
negative.code: 
  class Selector implements IMode {
      Hub _hub;
      bool isRunning;
  
      Shape _possibleShape;
      int _possibleId;
  
      Selector() {
          _hub = Hub.root;
  