   direction: 'next'
 
   moveCursor: (cursor) ->
+    point = cursor.getBufferPosition()
     @countTimes =>
-      cursor.setBufferPosition(@getPoint(cursor))
-
-  getPoint: (cursor) ->
-    cursorRow = cursor.getBufferRow()
-    wasAtNonBlankRow = not @editor.isBufferRowBlank(cursorRow)
-    options = {startRow: cursorRow, @direction, includeStartRow: false}
+      point = @getPoint(point)
+    cursor.setBufferPosition(point)
+
+  getPoint: (fromPoint) ->
+    wasAtNonBlankRow = not @editor.isBufferRowBlank(fromPoint.row)
+    options = {startRow: fromPoint.row, @direction, includeStartRow: false}
     for row in getBufferRows(@editor, options)
       if @editor.isBufferRowBlank(row)
-        return [row, 0] if wasAtNonBlankRow
+        return new Point(row, 0) if wasAtNonBlankRow
       else
         wasAtNonBlankRow = true
 
     switch @direction
-      when 'previous' then [0, 0]
+      when 'previous' then new Point(0, 0)
       when 'next' then getVimEofBufferPosition(@editor)
 
 class MoveToPreviousParagraph extends MoveToNextParagraph

  linewise: true

  moveCursor: (cursor) ->
    cursor.setBufferPosition(@getPoint(cursor))

  getCount: ->
    super - 1

  getPoint: (cursor) ->
    row = cursor.getBufferRow() + @getCount()
    [row, 0]

class MoveToRelativeLineWithMinimum extends MoveToRelativeLine
  @extend(false)

  defaultCount: null

  moveCursor: (cursor) ->
    cursor.setBufferPosition(@getPoint())
    cursor.autoscroll({center: true})

  getPoint: ->
    getFirstCharacterPositionForBufferRow(@editor, @getRow())

  getRow: ->
