     if @isReversed() then @getTop() else @getBottom()
 
   getTail: ->
-    _.detect @editor.getSelections(), ((s) -> swrap(s).isBlockwiseTail())
+    _.detect @editor.getSelections(), (s) -> swrap(s).isBlockwiseTail()
 
-  setTail: (newTail) ->
-    @clearTail()
-    @updateProperty(newTail, tail: true)
-
-  # Only for making cursor visible.
-  setHead: (newHead) ->
-    @clearHead()
-    @updateProperty(newHead, head: true)
-
-  constructor: ->
-    super
+  initialize: ->
+    # PlantTail
     unless @getTail()?
-      @setTail @getTop()
-      @setHead @getBottom()
-
-  reverse: ->
-    [newHead, newTail] = [@getTail(), @getHead()]
-    @setTail newTail
-    @setHead newHead
+      @updateProperties {tail: @getTop(), head: @getBottom()}
 
 class BlockwiseOtherEnd extends VisualBlockwise
   @extend()
   execute: ->
     unless @isSingleLine()
-      @reverse()
+      @updateProperties {tail: @getHead(), head: @getTail()}
     @vimState.reverseSelections()
 
 class BlockwiseMoveDown extends VisualBlockwise

        cursorsAdjusted.push cursor
      cursor.setBufferPosition(pointTarget)

    for selection in @editor.getSelections()
      adjustCursor(selection)
    @vimState.activate('normal')
    @vimState.activate('insert')


  @extend()
  delegateTo: 'DeleteToLastCharacterOfLine'
  execute: ->
    @eachSelection (s) ->
      {start} = s.getBufferRange()
      s.cursor.setBufferPosition(start)
    @vimState.activate('normal')
    @new(@delegateTo).execute()
