         moveCursorLeft(cursor)
 
       # When mode isnt 'visual' selection.isEmpty() at this point means no movement happened.
-      return if not @isMode('visual') and selection.isEmpty()
+      if selection.isEmpty() and (not @isMode('visual'))
+        return
+
       unless selection.isReversed()
         allowWrap = cursorIsAtEmptyRow(cursor)
         moveCursorRight(cursor, {allowWrap, preserveGoalColumn: true})
-      # Finally merge tailRange(= under cursor range where you start selection)
+      # Merge tailRange(= under cursor range where you start selection) into selection
       newRange = selection.getBufferRange().union(tailRange)
       selection.setBufferRange(newRange, {autoscroll: false, preserveFolds: true})
 
-  # Normalize visual-mode specific cursor position before/after modifySelection
-  # The purpose of this normalization is callbacked function,
-  # moveCursor works consistently both normal and visual mode.
+  # Normalize visual-mode cursor position
+  # The purpose for this is @moveCursor works consistently in both normal and visual mode.
   normalizeVisualModeCursorPosition: (selection) ->
-    {cursor} = selection
-    {submode} = @vimState
-    if submode is 'linewise'
+    if @isMode('visual', 'linewise')
       swrap(selection).restoreCharacterwise(preserveGoalColumn: true)
     # We selectRight()ed in visual-mode, so reset this effect here.
     unless selection.isReversed()
       selection.modifySelection ->
-        moveCursorLeft(cursor, {allowWrap: true, preserveGoalColumn: true})
+        moveCursorLeft(selection.cursor, {allowWrap: true, preserveGoalColumn: true})
 
   # Utils
   # -------------------------

  move: (cursor) ->
    moveCursorDown(cursor)

# TODO: Support softwrapped row
# -------------------------
class MoveUpToNonBlank extends Motion
  @extend()


  getScanRows: (cursor) ->
    cursorRow = cursor.getBufferRow()
    validRow = getValidVimRow.bind(null, @editor)
    switch @direction
      when 'up'
        [validRow(cursorRow - 1)..0]
      when 'down'
        [validRow(cursorRow + 1)..getVimLastBufferRow(@editor)]

  isMovableColumn: (row, column) ->
    @isNonBlankColumn(row, column)
