   getStartRow: -> @getRowFor('start')
   getEndRow: -> @getRowFor('end')
 
-
   getTailBufferRange: ->
     {editor} = @selection
-    if (@isSingleRow() and @isLinewise())
-      console.log "singleRow"
-      editor.bufferRangeForBufferRow(@getTailRow(), includeNewline: true)
-    else
-      console.log "normal tail"
-      tailStart = @selection.getTailScreenPosition()
-      # tailStart = @selection.getTailBufferPosition()
-      if @selection.isReversed()
-        # tailEnd = translatePointAndClip(editor, tailStart, 'backward')
-        tailEnd = editor.clipScreenPosition(tailStart.translate([0, -1]), clipDirection: 'backward')
-      else
-        # tailEnd = translatePointAndClip(editor, tailStart, 'forward')
-        tailEnd = editor.clipScreenPosition(tailStart.translate([0, +1]), clipDirection: 'forward')
-
-      # tailStart = @selection.getTailScreenPosition()
-      # if @selection.isReversed()
-      #   tailEnd = translatePointAndClip(editor, tailStart, 'backward')
-      # else
-      #   tailEnd = translatePointAndClip(editor, tailStart, 'forward')
-
-      editor.bufferRangeForScreenRange([tailStart, tailEnd])
+    tailPoint = @selection.getTailBufferPosition()
+    if @selection.isReversed()
+      point = translatePointAndClip(editor, tailPoint, 'backward')
+      new Range(point, tailPoint)
+    else
+      point = translatePointAndClip(editor, tailPoint, 'forward')
+      new Range(tailPoint, point)
 
   preserveCharacterwise: ->
     properties = @detectCharacterwiseProperties()


      point = Point.max(point, Point.ZERO)

  point

class SelectionWrapper
  constructor: (@selection) ->

    when 'forward'
      point = point.translate([0, +1])
      eol = editor.bufferRangeForBufferRow(point.row).end
      if point.isEqual(eol)
        return point

      if point.isGreaterThan(eol)
        return new Point(point.row + 1, 0)

      point = Point.min(point, editor.getEofBufferPosition())
    when 'backward'
      point = point.translate([0, -1])

